2011-03-17 7 views
3

Supposons que j'ai une table avec les colonnes:Combiner deux colonnes à un dans MySQL

`id`,`firstname`,`lastname` 

Avec quelques lignes comme:

'1','bob','marley' 
'2','mary','jane' 

Et j'ai une requête de recherche quelque chose comme ça (où ' bob marley « est mon terme de recherche):

select * where 
(`firstname` like 'bob marley%') 
or 
(`lastname` like 'bob marley%') 

mais cela n'obtient un coup si je cherche soit « bob » ou « marley », mais pas » bob ma rley ' Comment concaténer deux colonnes pour correspondre à un terme de recherche?

éditer: La table aura des centaines de milliers de lignes donc la performance est critique. est concat() assez efficace pour travailler dans une recherche ajax avec des appels de touches retardés? ou devrais-je redessiner ma table ou ajouter une colonne de texte intégral pour la recherche?

Répondre

10

Utilisez la fonction de CONCAT MySQL:

SELECT * FROM tablename WHERE CONCAT(firstname, ' ', lastname) LIKE 'bob marley%' 
4

Cela détruira les performances de votre requête, mais vous pouvez utiliser concat_ws pour les combiner avec un espace entre les deux.

select * 
from tbl 
where concat_ws(' ', firstname, lastname) like '%bob marley%' 

Notez que je mis votre right-sided-%-double-sided-%. Ceci est nécessaire sinon lors de la recherche en utilisant simplement marley, 'marley%' ne correspondra pas.

Questions connexes