Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: skomplikowane zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
AxZx
witam

wiem ze troche gupie posty pisze;) i moze zbyt skomplikowane, moze jednak ktos widzi blad i pomoze mi rozwiklad kolejna zagadke.

zapytanie wyglada tak:
  1. SELECT k.*,
  2. (SELECT count(*) AS ile FROM rodzaj_towar AS rt
  3. LEFT JOIN towary AS t ON (t.tow_id = rt.tow_id AND t.tow_status = 1 AND t.tow_pokaz = 1 AND t.kat_id = k.kat_id)
  4. INNER JOIN uzytkownicy AS u ON (u.u_id = t.u_id AND u.u_edycja = 1 AND u.u_status = 1)) AS ile_t
  5. FROM kategorie AS k
  6. ORDER BY k.kat_kolejnosc ASC


a przynajmniej wynik takiego zapytania chcialbym otrzymac:)
zapytanie ma zwrocic nazwy kategorii oraz ilosc towarow przypisanej do tej kategorii
blad wywala w miejscu:
  1. AND t.kat_id = k.kat_id

ze niby nie ma kolumny k.kat_id
to jak w takim razie odwolac sie do tej kolumny co jest poza LEFTJOINEM i poza podzapytaniem?

pozdrawiam madre glowy:)
Skobi
nie wiem czy taka pomoc Cie zadowala, ale ja bym to napisal mniej wiecej tak:

  1. SELECT k.id, k.kategoria, count(t.id_towar) AS ile_t
  2. FROM kategoria k LEFT OUTER JOIN towar t ON k.id_kategoria = t.id_kategoria
  3. GROUP BY
  4. k.id_kategoria, k.kategoria


moze nie jest to dokladnie identyczny przyklad, natomiast mysle, ze w bardzo prosty sposob
mozna to przerobic do Twojej postaci. Bardzo chetnie bym napisal to zapytnie cale natomiast nie mam
struktury bazy danych
gszesiek
to może to "FROM kategorie AS k" daj wcześniej, zanim się odwołasz to "k"
(oczywiście o ile resztę masz dobrze winksmiley.jpg )
AxZx
to by bylo proste gdyby nie bylo tabeli w ktorej jest tow_id i rodzaj_id
tow_id moze miec zalozmy 2 rodzaje, wiec wtedy beda 2 towary

struktura bazy jest mniej wiecej opisana w temacie
http://forum.php.pl/index.php?showtopic=54237
zastosowalem sie do rady sf i zrobilem 2 dodatkowe tabele w ktorych sa towary, rodzaje i laczenie towarow z rodzajem.

EDIT:
zalzawionymi oczami patrzac na monitor napisalem takie o to zapytanie ktore dalo mi wynik taki jaki chcialem, byc moze jest on od d... strony napisany, ale nie umiem inaczej w tej chwili.

  1. SELECT count(t.kat_id) AS ile_t, k.*
  2. FROM rodzaj_towar AS rt
  3. LEFT JOIN towary AS t ON (t.tow_id = rt.tow_id AND t.tow_status = 1 AND t.tow_pokaz = 1)
  4. INNER JOIN uzytkownicy AS u ON (u.u_id = t.u_id AND u.u_edycja = 1 AND u.u_status = 1)
  5. RIGHT JOIN kategorie AS k ON (k.kat_id = t.kat_id) GROUP BY k.kat_id ORDER BY k.kat_kolejnosc
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.