Comment rechercher plusieurs colonnes dans MySQL?

J'essaie de créer une fonctionnalité de recherche qui recherchera plusieurs colonnes pour trouver une correspondance basée sur un mot-clé. Cette requête:

SELECT title FROM pages LIKE %$query%;

Fonctionne uniquement pour la recherche d'une colonne, j'ai remarqué que la séparation des noms de colonnes avec des virgules entraîne une erreur. Est-il donc possible de rechercher plusieurs colonnes dans mysql?

27
demandé sur Quassnoi 2010-03-25 13:08:14

5 réponses

Vous pouvez utiliser les opérateurs et ou ou, en fonction de ce que vous voulez que la recherche retourne.

SELECT title FROM pages WHERE my_col LIKE %$param1% AND another_col LIKE %$param2%;

Les deux clauses doivent correspondre pour qu'un enregistrement soit renvoyé. Sinon:

SELECT title FROM pages WHERE my_col LIKE %$param1% OR another_col LIKE %$param2%;

Si l'une ou l'autre des clauses correspond, l'enregistrement sera retourné.

Pour en savoir plus sur ce que vous pouvez faire avec les requêtes MySQL SELECT, essayez la documentation .

31
répondu akamike 2010-03-25 10:16:45

Si c'est juste pour la recherche, vous pourrez peut-être utiliser CONCATENATE_WS. Cela permettrait la recherche de caractères génériques. Il peut y avoir des problèmes de performances en fonction de la taille de la table.

SELECT * 
FROM pages 
WHERE CONCAT_WS('', column1, column2, column3) LIKE '%keyword%'
38
répondu Terra Walker 2015-08-18 19:59:51

Si votre table est MyISAM:

SELECT  *
FROM    pages
WHERE   MATCH(title, content) AGAINST ('keyword' IN BOOLEAN MODE)

Ce sera beaucoup plus rapide si vous créez un index FULLTEXT sur vos colonnes:

CREATE FULLTEXT INDEX fx_pages_title_content ON pages (title, content)

, mais fonctionnera même sans l'index.

13
répondu Quassnoi 2010-03-25 10:14:44

1)

select *
from employee em
where CONCAT(em.firstname, ' ', em.lastname) like '%parth pa%';

2)

select *
from employee em
where CONCAT_ws('-', em.firstname, em.lastname) like '%parth-pa%';

First est utile lorsque nous avons des données comme: 'firstname lastname'.

Par exemple

  • Parth patel
  • parth p
  • patel parth

Second est utile quand nous avons des données comme: 'firstname-lastname'. Vous pouvez également utiliser des caractères spéciaux.

Par exemple

  • parth-patel
  • parth_p
  • patel # parth
3
répondu Parth Patel 2017-11-10 13:20:56
SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%');

Veuillez essayer avec la requête ci-dessus.

0
répondu user3781751 2017-08-05 08:41:28