Ich habe diese MySQL-Abfrage.
Ich habe Datenbankfelder mit diesem Inhalt
sports,shopping,pool,pc,games
shopping,pool,pc,games
sports,pub,swimming, pool, pc, games
Warum funktioniert diese Abfrage nicht? Ich brauche die Felder mit entweder Sport oder Pub oder beides?
SELECT * FROM table WHERE interests LIKE ('%sports%', '%pub%')
Das (a,b,c)
Liste funktioniert nur mit in
. Für like
müssen Sie or
verwenden:
WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'
Schnellere Vorgehensweise:
WHERE interests LIKE '%sports%' OR interests LIKE '%pub%'
ist das:
WHERE interests REGEXP 'sports|pub'
Diese Lösung wurde hier gefunden: http://forums.mysql.com/read.php?10,392332,392950#msg-39295
Weitere Informationen zu REGEXP finden Sie hier: http://www.tutorialspoint.com/mysql/mysql-regexps.htm
Warum probierst du nicht REGEXP aus? Versuchen Sie es wie folgt:
SELECT * FROM table WHERE interests REGEXP 'sports|pub'
Sie können auch RLIKE
verwenden.
Zum Beispiel:
SELECT * FROM TABLE_NAME WHERE COLNAME RLIKE 'REGEX1|REGEX2|REGEX3'
Ihre Anfrage sollte SELECT * FROM `table` WHERE find_in_set(interests, "sports,pub")>0
sein
Ich verstehe, dass Sie die Interessen in einem Feld Ihrer Tabelle speichern, was ein Missverständnis ist. Sie sollten definitiv eine "Interesse" -Tabelle haben.
Vergessen Sie nicht, Klammern zu verwenden, wenn Sie diese Funktion nach einem AND
-Parameter verwenden
So was:
WHERE id=123 and(interests LIKE '%sports%' OR interests LIKE '%pub%')
Wie von @Alexis Dufrenoy vorgeschlagen, könnte die Abfrage wie folgt lauten:
SELECT * FROM `table` WHERE find_in_set('sports', interests)>0 OR find_in_set('pub', interests)>0
Weitere Informationen im Handbuch .
Weitere Arbeitsbeispiele:
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";
Aufgabe war es, Teilnehmer an einer Veranstaltung (en) mit Filter zu zählen, wenn die E-Mail-Erweiterung mehreren Unternehmensdomänen entspricht.