web-dev-qa-db-fra.com

MySQL Comme plusieurs valeurs

J'ai cette requête MySQL.

J'ai des champs de base de données avec ce contenu

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

Pourquoi cette requête similaire ne fonctionne-t-elle pas? J'ai besoin des champs avec sport ou pub ou les deux?

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

La liste (a,b,c) ne fonctionne qu'avec in. Pour like, vous devez utiliser or:

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

Manière plus rapide de faire ceci:

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

est-ce:

WHERE interests REGEXP 'sports|pub'

Vous avez trouvé cette solution ici: http://forums.mysql.com/read.php?10,392332,392950#msg-39295

Plus d'informations sur REGEXP ici: http://www.tutorialspoint.com/mysql/mysql-regexps.htm

283
jazkat

Pourquoi ne pas essayer REGEXP. Essayez comme ça:

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

Vous pouvez également utiliser RLIKE.

Par exemple:

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

Votre requête doit être SELECT * FROM `table` WHERE find_in_set(interests, "sports,pub")>0

Ce que je comprends, c’est que vous stockez les intérêts dans l’un des champs de votre table, ce qui est une idée fausse. Vous devriez définitivement avoir une table "intérêt".

8
Alexis Dufrenoy

N'oubliez pas d'utiliser des parenthèses si vous utilisez cette fonction après un paramètre AND

Comme ça:

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

Comme @Alexis Dufrenoy l'a proposé, la requête pourrait être:

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

Plus d'informations dans le manuel .

2
Franc Drobnič

Plus d'exemples de travail:

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";

La tâche consistait à compter les participants à un événement avec filtre si l'extension du courrier électronique était égale à plusieurs domaines de la société.

0
Intacto