このMySQLクエリがあります。
この内容のデータベースフィールドがあります
sports,shopping,pool,pc,games
shopping,pool,pc,games
sports,pub,swimming, pool, pc, games
クエリのようにこれが機能しないのはなぜですか?スポーツかパブ、またはその両方のフィールドが必要ですか?
SELECT * FROM table WHERE interests LIKE ('%sports%', '%pub%')
(a,b,c)
リストは、in
でのみ機能します。 like
には、or
を使用する必要があります。
WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'
これを行うより速い方法:
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
REGEXPを試してみませんか。このようにしてみてください:
SELECT * FROM table WHERE interests REGEXP 'sports|pub'
RLIKE
も使用できます。
例えば:
SELECT * FROM TABLE_NAME WHERE COLNAME RLIKE 'REGEX1|REGEX2|REGEX3'
クエリはSELECT * FROM `table` WHERE find_in_set(interests, "sports,pub")>0
である必要があります
私が理解しているのは、テーブルの1つのフィールドに興味を格納するということです。これは誤解です。あなたは決定的に「関心」表を持つべきです。
AND
パラメーターの後にこの関数を使用する場合は、括弧を使用することを忘れないでください
このような:
WHERE id=123 and(interests LIKE '%sports%' OR interests LIKE '%pub%')
@Alexis Dufrenoyが提案したように、クエリは次のようになります。
SELECT * FROM `table` WHERE find_in_set('sports', interests)>0 OR find_in_set('pub', interests)>0
manual の詳細情報。
その他の作業例:
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";
タスクは、メール拡張子が複数の会社のドメインに等しい場合、フィルターを使用してイベントの参加者をカウントしました。