2010-09-27 5 views
4

J'ai une requête SQL qui utilise GROUP_CONCAT pour que toutes les personnes soient attachées à un certain ordre. Existe-t-il un moyen de rechercher dans le champ GROUP_CONCAT?Recherche GROUP_CONCAT utilisant LIKE

SELECT orders.orderID, 
GROUP_CONCAT(contacts.firstName, " ", contacts.lastName) AS attachedContacts 
FROM (orders) 
JOIN contacts ON orders.contactID=contacts.contactID 
GROUP BY orders.orderID 
ORDER BY orders.orderID DESC 

Je veux ajouter quelque chose comme WHERE attachedContacts LIKE '%Eric%', uniquement les commandes de la liste avec « Eric » attaché, mais comprennent toujours tous les autres contacts dans la requête.

Les retours de requête de données comme:

orderID atachedContacts 
01  Eric Siegel, John Smith 
02  Jason Jackson, Bill O'Neil 
03  Eric Siegel, Jason Jackson, Neil O'Ryan 

Je veux la requête pour renvoyer les lignes 01 et 03 parce que « Eric » est dans la liste des contacts.

Comment est-ce que je peux faire ceci?

Répondre

9

Essayez ceci:

SELECT orders.orderID, 
GROUP_CONCAT(contacts.firstName, " ", contacts.lastName) AS attachedContacts 
FROM orders 
JOIN contacts ON orders.contactID=contacts.contactID 
GROUP BY orders.orderID DESC 
HAVING attachedContacts LIKE '%Eric%' 
+0

Wow, qui fonctionnait vraiment! Je suppose qu'il n'y a pas de moyen plus propre de faire cela? –

+1

'cleaner' est discutable, mais vous pouvez utiliser une clause 'HAVING' au lieu d'une sous-requête je crois, ou un autre' JOIN' distinct sur les contacts avec 'LIKE' dans la clause' ON', mais je testerais on est meilleur/performant mieux. – Wrikken

+0

Je ne sais pas comment utiliser 'HAVING', et la requête que j'ai posté n'est qu'une partie de la requête complète, il y a 3 autres instructions' JOIN'. –

Questions connexes