2009-06-16 24 views
99

Czy coś takiego jest możliwe:Korzystanie odrębne i COUNT razem w MySQL Query

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

Co chcę jest uzyskanie liczby unikalnych identyfikatorów produktów, które są związane ze słowem kluczowym. Ten sam produkt może być związane dwukrotnie słowo kluczowe, lub więcej, ale chciałbym tylko 1 raz, aby liczyć na identyfikator produktu

Odpowiedz

221

użytku

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

Zaktualizowano odpowiedź, ponieważ jest bliska otrzymania doskonałej odpowiedzi i była niepoprawna pod względem syntaktycznym. –

+0

Jestem przeciwko odpowiedziom, które nie oferują optymalnej wydajności, jeśli chodzi o bazy danych. Bardzo ważne jest utrzymanie standardów wydajności. Pójdę z odpowiedzią @ alistair-hart. – JDuarteDJ

+0

Wielki człowiek. Działa –

30

Byłaś blisko :-)

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

Zaktualizowano odpowiedź, ponieważ jest blisko, aby stać się dobrą odpowiedzią i była składniowa niepoprawna. –

+0

niska wydajność – JDuarteDJ

-4

Czy to nie lepiej z grupą? Coś jak:

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

Chce numeru różnych identyfikatorów produktu. Zapytanie zwraca liczbę wierszy dla każdego słowa kluczowego. – David

41

chciałbym zrobić coś takiego:

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

które dadzą Ci listę jak

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

To pozwala zobaczyć, ilu z każdego odrębnego IDProduktu Identyfikator powiązany jest ze słowem kluczowym.

+0

Niska wydajność, nie można tego zaakceptować w odpowiedzi na Alistair. – JDuarteDJ

14

FYI, jest to prawdopodobnie szybciej,

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

niż ten,

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

Czy możesz wyjaśnić, dlaczego? Jestem ciekawy. – lpacheco

+0

Nie wiem, czy jest to szybsze, ale sposób zliczania wielu kolumn z odrębnym słowem kluczowym. – VladL

+0

Fantastyczna odpowiedź. Jego odpowiedź jest co najmniej 100 razy szybsza w moim przypadku. Niewielka zmiana w zrozumieniu kodu @ Alistaira to "LICZBA WYBORU (*) Z (WYBIERZ odrębny identyfikator produktu WHERE słowo kluczowe =" słowo kluczowe ") temp' –

5

Co, do cholery, z całej tej pracy pylników

to zbyt proste

jeśli chcesz listę ile productId w każdym kluczu słowo tutaj to kod

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

Dziękuję za ten komentarz, a nie za purystyczną odpowiedź na jego dokładne pytanie, ale może to, czego szuka dla, i w każdym razie użyteczne. – Leo