web-dev-qa-db-fra.com

Comment rechercher plusieurs colonnes dans MySQL?

J'essaie de créer une fonction de recherche qui recherchera plusieurs colonnes pour trouver une correspondance par 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 par des virgules entraînait une erreur. Alors, est-il possible de rechercher plusieurs colonnes dans mysql?

28
George

Vous pouvez utiliser les opérateurs AND ou OR, en fonction de ce que vous souhaitez que la recherche renvoie.

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é. Alternativement:

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

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

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

33
akamike

Si c’est juste pour la recherche, vous pourrez peut-être utiliser CONCATENATE_WS . Cela permettrait une recherche avec un caractère générique . Il pourrait y avoir des problèmes de performances selon la taille de la table.

SELECT * 
FROM pages 
WHERE CONCAT_WS('', column1, column2, column3) LIKE '%keyword%'
40
Terra Walker

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 index.

14
Quassnoi

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%';

Le premier est utile lorsque nous avons des données telles que: 'prénom nom'.

par exemple 

  • parth patel
  • parth p
  • patel parth

Deuxièmement, il est utile de disposer de données telles que: 'prénom-nom'. Vous pouvez également y utiliser des caractères spéciaux.

par exemple 

  • parth-patel
  • parth_p
  • patel # parth
3
Parth Patel
SELECT * FROM persons WHERE (`LastName` LIKE 'r%') OR (`FirstName` LIKE 'a%');

Veuillez essayer avec la requête ci-dessus.

0
user3781751