Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: count i where
Forum PHP.pl > Forum > Bazy danych > MySQL
acztery
witam,

Mam taki kłopot.

Mam 2 tabele

1. cat - kategorie ( Id, Name, Act )
2. favcat - ulubione kategorie ( Id, CatId, UserId, Date )

i teraz chodzi o to : dla zalogowanych użytkowników w miejscu gdzie listuje kategorie kategoria która znajduje sie w ulubionych dla danego usera ma byc jakoś odznaczona - to robie w smarty sobie.. )

mam takie zapytanie:

  1. SELECT * , count( favcat.Id ) AS count_f , cat.Id AS Id
  2. FROM cat LEFT JOIN favcat ON cat.Id = favcat.CatId
  3. GROUP BY cat.Id


ale to mi robi dla wszystkich rekordów w tabeli favcat jak dodam warunek ( favcat.UserId = 1 ) to pokazuje tylko te kategorie które są dodane do ulubionych...

wiec to nied ziała:

  1. SELECT * , count( favcat.Id ) AS count_f , cat.Id AS Id
  2. FROM cat LEFT JOIN favcat ON cat.Id = favcat.CatId WHERE favcat.UserId=1
  3. GROUP BY cat.Id


moze jakies pomysły..

ROZWIAZANIE

  1. SELECT * , count( favcat.Id ) AS count_f, cat.Id AS Id
  2. FROM cat LEFT JOIN favcat ON cat.Id = favcat.CatId AND favcat.UserId =2
  3. GROUP BY cat.Id
  4. LIMIT 0, 30
leviath
Skorzystaj z RIGHT JOIN
osiris
Mam jedna uwage co do struktury tabeli 'ulubione kategorie'.

Rozumiem ze teraz pole ID jest kluczem glownym. Jesli tak to jest to niepotrzebne bo kluczem glownym w tym przypadku moga byc dwie kolumny UserId i CatId, a niepotrzebne kolumny (szczegolnie z zalozonymi indeksami - a tak przynajmniej powinno byc w Twoim wypadku) to oczywiscie spadek wydajnosci przy wstawianiu danych.

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.