ďťż

[MySQL] GROUP BY z warunkami

       

Podstrony


telcocafe

Jak wyciągnąć 5 najpopularniejszych słów kluczowych dla elementu o ID = 999?
SELECT tag FROM tags GROUP BY tag HAVING 999 ORDER BY COUNT(*) DESC LIMIT 5
Niestety zapytanie pobiera ostatnie tagi dla wszystkich elementów. Pola w tabeli tags:
* tag - varchar(50) - słowo kluczowe
* id - int - ID elementu
* who - int - ID użytkownika - nieistotne w problemie



HAVING jest do elementów wirtualnych, WHERE do realnych kolumn w tabeli - np. id = 999 powinno raczej działać. Zwróć też uwagę że dla dużej ilości elementów (ponad 1000 powiedzmy) zapytanie za szybkie nie będzie bo za dużo liczy.
Użytkownik Riklaunim edytował ten post 17 marzec 2009, 15:50
Rzeczywiście WHERE działa z GROUP. Wcześniej MySQL zwracał błąd, bo WHERE stawiałem po GROUP.

Jeśli chodzi o wydajność - czy utworzenie dodatkowego pola `popularity` jest lepszym rozwiązaniem? Wtedy wystarczy sortować: ORDER BY popularity DESC

Wystarczy większa ilość rekordów w tabeli żeby COUNTy zamulały, więc denormalizacja znacząco zwiększa wydajność tego :)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.