web-dev-qa-db-ja.com

MySQL Like複数の値

このMySQLクエリがあります。

この内容のデータベースフィールドがあります

sports,shopping,pool,pc,games 
shopping,pool,pc,games 
sports,pub,swimming, pool, pc, games   

クエリのようにこれが機能しないのはなぜですか?スポーツかパブ、またはその両方のフィールドが必要ですか?

SELECT * FROM table WHERE interests LIKE ('%sports%', '%pub%')
124
webmasters

(a,b,c)リストは、inでのみ機能します。 likeには、orを使用する必要があります。

WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'
112
Andomar

これを行うより速い方法:

WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'

これは:

WHERE interests REGEXP 'sports|pub'

ここでこのソリューションを見つけました: http://forums.mysql.com/read.php?10,392332,392950#msg-39295

REGEXPの詳細はこちら: http://www.tutorialspoint.com/mysql/mysql-regexps.htm

278
jazkat

REGEXPを試してみませんか。このようにしてみてください:

SELECT * FROM table WHERE interests REGEXP 'sports|pub'
32
Ahmad Hussain

RLIKEも使用できます。

例えば:

SELECT * FROM TABLE_NAME WHERE COLNAME RLIKE 'REGEX1|REGEX2|REGEX3'
9
iamharish15

クエリはSELECT * FROM `table` WHERE find_in_set(interests, "sports,pub")>0である必要があります

私が理解しているのは、テーブルの1つのフィールドに興味を格納するということです。これは誤解です。あなたは決定的に「関心」表を持つべきです。

8
Alexis Dufrenoy

ANDパラメーターの後にこの関数を使用する場合は、括弧を使用することを忘れないでください

このような:

WHERE id=123 and(interests LIKE '%sports%' OR interests LIKE '%pub%')
5
Luan

@Alexis Dufrenoyが提案したように、クエリは次のようになります。

SELECT * FROM `table` WHERE find_in_set('sports', interests)>0 OR find_in_set('pub', interests)>0

manual の詳細情報。

2
Franc Drobnič

その他の作業例:

SELECT COUNT(email) as count FROM table1 t1 
JOIN (
      SELECT company_domains as emailext FROM table2 WHERE company = 'Dell'
     ) t2 
ON t1.email LIKE CONCAT('%', emailext) WHERE t1.event='PC Global Conference";

タスクは、メール拡張子が複数の会社のドメインに等しい場合、フィルターを使用してイベントの参加者をカウントしました。

0
Intacto