2010-01-06 5 views
5

Ist es möglich, GROUP_CONCAT in eine MYSQL WHERE-Klausel zu setzen?Verwenden von MYSQL GROUP_CONCAT in der WHERE-Klausel

Ich habe zwei Tabellen (eine für Mitglieder und eine für Zahlungsinformationen). Zum Beispiel

Mitglieder Tabelle

num, memNumber, fullName, coporateName, surname 
001, mem0010, Joe Bloggs, NULL, Bloggs 
002, mem0015, NULL, BBC 
003, mem0017, John Peters, NULL 
004, mem0101, Emma Jane, NULL 

Zahlung Tabelle

num, memberID, subscriptionYear, amount 
001, mem0010, 2008, 30 
003, mem0010, 2010, 40 
004, mem0015, 2010, 40 
005, mem0017, 2009, 35 
006, mem0101, 2009, 35 
007, mem0017, 2010, 40 

ich die folgende Abfrage Informationen abgerufen wurden aus beiden Tabellen (I vereinfacht es, um es besser lesbar) .

SELECT members.num, members.memNumber , members.fullName , members.corporateName , 
     CONCAT(members.corporateName , members.surname) AS searchSurname , 
     GROUP_CONCAT(payment.subscriptionYear) As subscriptionYear , 
     GROUP_CONCAT(payment.amount) AS amount  
FROM members 
LEFT JOIN payment ON members.memNumber = payment.memberID  
WHERE `subscriptionYear` NOT LIKE '%2009%'  
GROUP BY members.num  
ORDER BY `searchSurname` ASC 

Aber es entfernt die „2009“ von den Ergebnissen der subscriptionYear Spalte. Kann nicht sehen, ob 2009 in der resultierenden GROUP_CONCAT ist?

Antwort

23

WHERE geschieht VOR der Gruppierung, Sie wollen HAVING verwenden, was nach der Gruppierung geschieht.

+1

Fantastisch! Danke, dass du so schnell und hilfsbereit bist. Hätte nicht gedacht, dass es so einfach wäre! Aus irgendeinem Grund war ich HAVING nicht begegnet. Diese Werke-jetzt SELECT members.num, members.memNumber, members.fullName, members.corporateName, CONCAT (members.corporateName, members.surname) AS searchSurname, GROUP_CONCAT (payment.subscriptionYear) Als subscriptionYear, GROUP_CONCAT (payment.amount) AS Menge von Mitgliedern LEFT JOIN Zahlung ON members.memNumber = payment.memberID WHERE 'subscriptionYear' NOT LIKE '% 2009%' GROUP BY members.num MIT subscriptionYear NOT LIKE '% 2009%' ORDER BY 'searchSurname' ASC – iagdotme

+1

Ist das nicht redundant? Wenn Ihr WHERE 2009 Zeilen vor der Gruppierung entfernt, sollte keine Gruppierung überhaupt 2009 enthalten haben? Oder ist Ihr Beispiel nur ein Beispiel und nicht die eigentliche Abfrage? – MindStalker