Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] liczba podkategorii w kategorii
Forum PHP.pl > Forum > Przedszkole
adasiu
Witam,

mam tablicę test
Kod
id|parent_id|name


jak pobrać dane z kategorii sumując przy tym liczbę podkategorii?

pozdrawiam.
darko
Kategorią główną będzie rekord, który ma parent_id równy 0. Ilość tych podkategorii możesz ustalić pobierając ilość rekordów "po drodze" do kategorii głównej (tu odpowiednie zapytanie SQL korzystające z COUNT)
adasiu
Cytat(darko @ 12.05.2011, 20:59:25 ) *
Kategorią główną będzie rekord, który ma parent_id równy 0. Ilość tych podkategorii możesz ustalić pobierając ilość rekordów "po drodze" do kategorii głównej (tu odpowiednie zapytanie SQL korzystające z COUNT)


Kod
|id|parent_id|name
|1|0|programowanie
|2|0|bazy
|3|1|php
|4|1|asp
|5|1|jsp
|6|1|asembler
|7|2|mysql
|8|2|mssql


Wyszukuje z kategorii głównej dajmy na to;)
  1. SELECT * FROM test t WHERE t.parent_id = 0

Jak teraz wyliczyć że w kategorii 1 znajdują się 4 rekordy a w kategorii 2 2
darko
  1. SELECT count(id) FROM test WHERE parent_id=1
adasiu
Cytat(darko @ 12.05.2011, 21:13:35 ) *
  1. SELECT count(id) FROM test WHERE parent_id=1

No tak ale to mam podzapytanie dla każdego pobranego rekordu. A jest możliwość pobrania tego za pomocą joina i grupowania??
darko
Najnormalniej wyciągasz dane, które Cię interesują i do listy wyławianych z bazy rzeczy dodajesz tego counta, najlepiej z aliasem, coś takiego powinno przejść:
  1. SELECT *, count(id) AS ile FROM test t WHERE t.parent_id = 1
adasiu
Cytat(darko @ 12.05.2011, 21:23:40 ) *
Najnormalniej wyciągasz dane, które Cię interesują i do listy wyławianych z bazy rzeczy dodajesz tego counta, najlepiej z aliasem, coś takiego powinno przejść:
  1. SELECT *, count(id) AS ile FROM test t WHERE t.parent_id = 1


Takie rozwiązanie daje zliczenie wyszukanych rekordów (czyli w tym przypadku 4)
A mnie interesuje rozwiązanie w którym dostanę:
programowanie (4)
bazy (2)
marcin421
Cześć,
ja bym zobaczył tak:

  1. SELECT parent_id, count(id) FROM tabele GROUP BY parent_id


albo

  1. SELECT parent_id, count(*) FROM tabele GROUP BY parent_id
adasiu
Cytat(marcin421 @ 12.05.2011, 21:37:26 ) *
Cześć,
ja bym zobaczył tak:

  1. SELECT parent_id, count(id) FROM tabele GROUP BY parent_id


albo

  1. SELECT parent_id, count(*) FROM tabele GROUP BY parent_id


To mi daje liczbę rekordów dla każdego rodzica;)
darko
  1. SELECT *, parent_id, count(*) AS ile FROM test GROUP BY parent_id

Jak już napisał marcin421 - to zapytanie grupujące zwróci prawie to, co potrzebujesz.
adasiu
Cytat(darko @ 12.05.2011, 21:44:41 ) *
  1. SELECT *, parent_id, count(*) AS ile FROM test GROUP BY parent_id

Jak już napisał marcin421 - to zapytanie grupujące zwróci prawie to, co potrzebujesz.


Właśnie - prawie to wink.gif

Dokładnie to co potrzebuję zwróci zapytanie:
  1. SELECT *, (SELECT COUNT(*) FROM test WHERE t.id = test.parent_id) count FROM `test` t WHERE parent_id = 0

tylko pytanie czy da się bardziej optymalnie:)
marcin421

  1. SELECT
  2. a.parent_id,
  3. (SELECT b.name FROM test b WHERE b.id = a.parent_id LIMIT 1) AS new_name,
  4. count(a.id)
  5. FROM
  6. test a
  7. GROUP BY
  8. a.parent_id
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.