Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL]Jak wyświetlic i pogrupowac wyniki wg ukladu matka -> dziecko, Dane są w jednej tabeli, jest jeden poziom dzieciaków.
kukix
post 15.06.2010, 10:03:53
Post #1





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Witam.
Posiadam tabele z wpisami z polem "parent".

Potrzebuje teraz wyświetlic wyniki i zgrupować do siebie rodzica i dzieci.


Potrzebuje otrzymac wynik w postaci:

Cytat
RODZIC 1
DZIECKO A
DZIECKO B
DZIECKO C

RODZIC 2
DZIECKO A
DZIECKO B
DZIECKO C


Potrzebował bym, żeby sprawdzić, czy rodzic spełnia okreslone warunki np (WHERE warunek1='A' AND warunek2='B' ORDER BY kolumna 1).

P.S. Będzie tylko jeden poziom dzieci.


Jak ułozyc zapytanie, aby tak wyświetlic wyniki?
Będe wdzięczny za wszelkie wypowiedzi.

Ten post edytował kukix 15.06.2010, 10:14:04
Go to the top of the page
+Quote Post
gothye
post 15.06.2010, 12:20:36
Post #2





Grupa: Zarejestrowani
Postów: 702
Pomógł: 65
Dołączył: 16.03.2009

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


wykonaj jedno zapytanie do SQL , a potem w 2 pętlach foreach połącz parent z child przez warunek if


--------------------
Nie udzielam pomocy poprzez PW
Go to the top of the page
+Quote Post
kukix
post 15.06.2010, 13:09:15
Post #3





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Cytat(gothye @ 15.06.2010, 13:20:36 ) *
wykonaj jedno zapytanie do SQL , a potem w 2 pętlach foreach połącz parent z child przez warunek if


to nie o to chodzi.. chcilem ulozyc zapytanie sql, które zwróci mi juz tak pogrupowane wyniki..
Go to the top of the page
+Quote Post
netmare
post 15.06.2010, 21:21:03
Post #4





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

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


  1. SELECT a.nazwa AS rodzic, b.nazwa AS dziecko
  2. FROM nazwatabeli AS a
  3. INNER JOIN nazwatabeli AS b
  4. ON a.id_parent IS NULL AND b.id_parent = a.id


tej wersji bym się raczej trzymał a po twojemu to jakoś tak (pod warunkiem że najpierw był dodawany rodzic a później dzieci):

  1. SELECT b.nazwa, b.id
  2. FROM nazwatabeli AS a
  3. INNER JOIN nazwatabeli AS b
  4. ON b.id_parent = a.id OR (b.id = a.id AND a.id_parent IS NULL)
  5. ORDER BY b.id ASC


nazwatabeli - nazwa tabeli w której masz te dane
id - pole klucza
id_parent - pole określające id rodzica, null jeśli rodzic
nazwa - to pole w którym masz stringi rodzic 1, dziecko a itd

SQL-e pisane z głowy bez sprawdzania, za ewentualne pomyłki przepraszam.

Tak czy owak bardzo oryginalna konstrukcja bazy winksmiley.jpg
Go to the top of the page
+Quote Post
kukix
post 8.07.2010, 12:20:40
Post #5





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Dziękuje za podpowiedzi.. mam takie coś już:

  1. SELECT b.nazwa, b.id
  2. FROM nazwatabeli AS a
  3. INNER JOIN nazwatabeli AS b
  4. ON b.id_parent = a.id OR (b.id = a.id AND b.id_parent IS NULL)
  5. WHERE a.id_parent IS NULL
  6. ORDER BY a.id_parent, b.id_parent



Jest już prawie ok, ale zwracane rekordy dziecka napisywane są przez rekordy mamy.

Czyli mam np jedną mame i troje dzieci, to zwracany wynik zawiera cztery razy dane mamy.

Czy można to jakoś zmienić, czy musze każde pole bazy nazywac inaczej (b.pole as inna_nazwa_pola)
Go to the top of the page
+Quote Post
thek
post 8.07.2010, 13:10:48
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Daj SELECT a.*, b.* i popatrz które pola są prawidłowymi smile.gif To je wybierz do wyświetlania winksmiley.jpg


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 12.07.2025 - 22:38