Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zliczanie ilosci rekordow dla rodzica
maciu
post
Post #1





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

Ostrzeżenie: (0%)
-----


Mam 2 tabele

kategorie
id | nazwa | id_rodzic
1 | nazwa1 | 0
2 | nazwa2 | 1
3 | nazwa3 | 1
4 | nazwa4 | 0
5 | nazwa5 | 4

kategorie_wpis
id | id_kategoria
1 1
2 2
3 2
4 3
5 5

Teraz chciałbym zliczyć ilość rekordów w tabeli kategorie_wpis gdzie id_kategoria jest równa id przodka danego rodzica. czyli np. kategoria o id 1 ma dwóch przodków (id 2 i 3) i teraz chcę zliczyć ilość rekordów w tabeli kategorie_wpis gdzie id_kategoria równa się 2 lub 3 (czyli id przodków kategorii 1). Z tym, że parametrem jaki znamy przy wyszukiwaniu jest id rodzica, id przodków musimy wybrać w zapytaniu.

Czy da się to zrobić w jednym zapytaniu?
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. SELECT count(kw.id) FROM kategorie k
  2. LEFT JOIN kategorie_wpis kw ON kw.id_kategoria=k.id
  3. WHERE k.id_rodzic=1

pisane z palca
Go to the top of the page
+Quote Post
maciu
post
Post #3





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

Ostrzeżenie: (0%)
-----


dziękuje nospor, dokładnie o to chodziło.

A dałoby się zrobić tak, aby zapytanie zwracało tablice kategorii rodziców i ilość rekordów ich potomków(według tej samej zasady co poprzednio)
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




oczywiscie:
  1. SELECT count(kw.id), k.id_rodzic FROM kategorie k
  2. LEFT JOIN kategorie_wpis kw ON kw.id_kategoria=k.id
  3. GROUP BY k.id_rodzic
Go to the top of the page
+Quote Post
maciu
post
Post #5





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

Ostrzeżenie: (0%)
-----


niestety nie jest dobrze. Nie pobiera kategorii rodziców, tylko przodów, ale za to dobrze zlicza ilość wpisów przodków
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Podaj na przykladzie co chcesz osiągnac bo chyba nie jarze
Go to the top of the page
+Quote Post
maciu
post
Post #7





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

Ostrzeżenie: (0%)
-----


tablica jaką bym chciał otrzymać w tym zapytaniu to:

id | nazwa (tylko kategorie rodzice) | suma rekordów dla rodzica i jego dzieci
1 | nazwa1 | 4
4 | nazwa4 | 1

Ten post edytował maciu 20.11.2007, 09:35:46
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no to to zapytanie co dostales robi wlasnie prawie to (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Wystarczylo tylko lekka modyfikacja:
  1. SELECT count(kw.id), k.id_rodzic FROM kategorie k
  2. LEFT JOIN kategorie_wpis kw ON kw.id_kategoria=k.id
  3. WHERE k.id_rodzic >0
  4. GROUP BY k.id_rodzic


A jeśli jeszcze chcesz miec nazwe id_rodzica to:
  1. SELECT count(kw.id), k2.nazwa,k.id_rodzic FROM kategorie k
  2. LEFT JOIN kategorie k2 ON k.id_rodzic = k2.id
  3. LEFT JOIN kategorie_wpis kw ON kw.id_kategoria=k.id
  4. WHERE k.id_rodzic >0
  5. GROUP BY k.id_rodzic

Pisane jak zwykle z palca
Go to the top of the page
+Quote Post
maciu
post
Post #9





Grupa: Zarejestrowani
Postów: 238
Pomógł: 1
Dołączył: 27.08.2003

Ostrzeżenie: (0%)
-----


nospor jesteś wielki (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)

To rozwiązanie ma tylko jedną wadę. Nie pobierze rodziców, którzy nie mają dzieci. Dla moich potrzeb w żadne sposób to nie koliduje, ale chciałem na to zwrócić uwagę jako ciekawostkę.
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
To rozwiązanie ma tylko jedną wadę. Nie pobierze rodziców, którzy nie mają dzieci. Dla moich potrzeb w żadne sposób to nie koliduje, ale chciałem na to zwrócić uwagę jako ciekawostkę.


  1. SELECT count(kw.id), k2.nazwa,k.id_rodzic FROM kategorie k2
  2. LEFT JOIN kategorie k ON k.id_rodzic = k2.id
  3. LEFT JOIN kategorie_wpis kw ON (kw.id_kategoria=k.id AND k.id IS NOT NULL)
  4. GROUP BY k2.id

bodajze tak
(IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 12:54