2009-06-16 17 views
99

ist so etwas wie dieses möglich:Mit DISTINCT und COUNT zusammen in einer MySQL Query

SELECT DISTINCT COUNT(productId) WHERE keyword='$keyword' 

Was ich will, ist die Anzahl der eindeutigen Produkt-IDs zu erhalten, die mit einem Schlüsselwort zugeordnet sind. Das gleiche Produkt kann zweimal mit einem Schlüsselwort zugeordnet werden, oder mehr, aber ich würde nur 1 Mal pro mag Produkt-ID gezählt werden

Antwort

221

Verwendung

SELECT COUNT(DISTINCT productId) from table_name WHERE keyword='$keyword' 
+0

Die Antwort wurde aktualisiert, da sie kurz davor ist, eine gute Antwort zu sein, und sie war syntaktisch falsch. –

+0

Ich bin gegen Antworten, die nicht optimale Leistung bieten, wenn es um Datenbanken geht. Es ist wichtig, Leistungsstandards einzuhalten. Ich würde mit @ Alistair-Harts Antwort gehen. – JDuarteDJ

+0

Großer Mann. Es funktioniert –

30

Sie schließen :-)

waren
select count(distinct productId) from table_name where keyword='$keyword' 
+0

Aktualisiert die Antwort, wie es nahe ist, eine gute Antwort zu werden, und es war syntaktisch falsch. –

+0

low Performance – JDuarteDJ

-4

Ist es nicht besser mit einer Gruppe von? Etwas wie:

SELECT COUNT(*) FROM t1 GROUP BY keywork; 
+1

Er möchte die Anzahl der eindeutigen ProductIDs. Ihre Abfrage gibt die Anzahl der Zeilen für jedes Keyword zurück. – David

41

würde ich so etwas tun:

Select count(*), productid 
from products 
where keyword = '$keyword' 
group by productid 

, die Ihnen eine Liste wie

count(*) productid 
---------------------- 
5   12345 
3   93884 
9   93493  

Dies ermöglicht es Ihnen, wie viele jeder verschiedenen productid zu sehen ID ist mit dem Schlüsselwort verknüpft.

+0

Geringe Leistung, kann dies nicht über Alistairs Antwort akzeptieren. – JDuarteDJ

14

FYI, ist dies wahrscheinlich schneller,

SELECT count(1) FROM (SELECT distinct productId WHERE keyword = '$keyword') temp 

als diese,

SELECT COUNT(DISTINCT productId) WHERE keyword='$keyword' 
+15

Haben Sie etwas dagegen, warum? Ich bin neugierig. – lpacheco

+0

Nicht sicher, ob es schneller ist, aber die Art, mehrere Spalten mit unterschiedlichen Schlüsselwort zu zählen – VladL

+0

Fantastische Antwort. Seine Antwort ist in meinem Fall mindestens 100 Mal schneller. Eine kleine Änderung für das Verständnis von @ Alistair Code ist 'SELECT count (*) VON (SELECT distinct productId WHERE Schlüsselwort = '$ Schlüsselwort') temp' –

5

Was zum Teufel all dieser Arbeit Antheren

es zu einfach ist

wenn Sie möchten eine Liste, wie viel productId in jedem Schlüssel ist Wort hier ist es der Code

SELECT count(productId), keyword FROM `Table_name` GROUP BY keyword; 
+0

Danke für diesen Kommentar, nicht die puristische Antwort auf seine genaue Frage, aber vielleicht, was er sucht für und sowieso nützlich. – Leo