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?
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 .
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%'
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.
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
SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%');
Veuillez essayer avec la requête ci-dessus.