Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQLite]Pobieranie danych z trzech tabeli
Forum PHP.pl > Forum > Przedszkole
fire_dept
Witam!

Uczę się SQLite i mam problem z pobieraniem danych.

Mam 3 przykładowe tabele

Kod
menu
id name
1 rowery
2 samochody

sub_menu
id menu_id name
1      2      Alfa Romeo
2      2      BMW

sub_sub_menu
id sub_menu_id name
1  Alfa Romeo    156
2  Alfa Romeo    166


ja pobierałem to w ten sposób

  1. SELECT * FROM menu
  2. LEFT JOIN sub_menu ON menu.id = sub_menu.menu_id
  3. LEFT JOIN sub_sub_menu ON sub_menu.name = sub_sub_menu.menu_id
  4. ORDER BY menu.name, sub_menu.name, sub_sub_menu.name ASC


Próbowałem zmęczyć to na różne sposoby ale nie wypluwa mi danych tak jak bym chciał
Chodzi mi konkretnie o coś takiego.

Kod
-rowery
-samochody
  -alfa romeo
    -156
    -166
  -BMW


zegarek84
troszku inaczej - skoro unikalne masz w sum_menu nazwy to też powinieneś szukać po id...
dane wejściowe takie same, struktury:
  1. CREATE TABLE "menu" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "name" VARCHAR);
  2. CREATE TABLE "sub_menu" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , "menu_id" INTEGER, "name" VARCHAR);
  3. CREATE TABLE "sub_sub_menu" ("id" INTEGER PRIMARY KEY NOT NULL , "sub_menu_id" INTEGER, "name" VARCHAR);

dane wejściowe te same które podałeś winksmiley.jpg

zapytanie:
  1. SELECT m.`name`, sm.`name`, ssm.`name` FROM `menu` AS m
  2. LEFT JOIN `sub_menu` AS sm ON m.`id`=sm.`menu_id`
  3. LEFT JOIN `sub_sub_menu` AS ssm ON sm.`id`=ssm.`sub_menu_id`
  4. ORDER BY m.`name`, sm.`name`, ssm.`name` ASC

Wynik:
fire_dept
Dzięki za wielką pomoc działa z małym problemem smile.gif

Otóż wypluwa mi takie dane próbowałem DISTINCT ale nie działa poprawnie


Kod
- samochody
- alfa romeo
  - 156
- samochody
- alfa romeo
  - 166
- samochody
-bmw


dałoby się to w jakiś sposób uporządkować w coś takiego

Kod
-samochody
- alfa romeo
  - 156
  - 166
- bmw


byłbym wdzięczny i zobowiązany smile.gif
thek
Użyj zapytania podanego przez zegarek84. Ważne jest to, byś potem odpowiednio przeszedł przez rekordy tworząc kilkuwymiarową tablicę. Jak? Podam algorytm smile.gif
1. Bierzemy rekord i sprawdzamy czy jego pierwsze pole istnieje.
2. Jeśli nie tworzymy ją.
3. Jeśli tak wchodzimy do niej
4. Bierzemy następne pole i sprawdzamy czy owo pole już istnieje w tablicy.
5. Wracamy do punktu 2.
6. Jeśli brak kolumny następnej wracamy do punktu 1.
7. Postępujemy tak długo dopóki mamy rekordy.

Teraz pokażę jak to na żywca wygląda.

Rekord: rowery
Bierzemy i sprawdzamy. Brak tablicy więc tworzymy węzeł o tej nazwie. Nie ma nstępnych kolumn. Idziemy do kolejnego rekordu.
Samochody-alfa romeo-156: Brak samochodów więc tworzymy. Alfa romeo brak - tworzymy w Samochody ten węzeł. 156 brak w Alfa romeo - tworzymy węzeł. Brak kolumn - idziemy do kolejnego rekordu
Samochody-alfa romeo-165: Samochody istnieją - wchodzimy tam. Alfa romeo istnieje - wchodzimy tam. 165 nie istnieje - tworzymy ten węzeł w Alfa romeo. Brak kolumn - idziemy do kolejnego rekordu.
Samochody-bmw: Samochody istnieją - wchodzimy tam. Bmw nie istnieje - tworzymy. Brak kolumn. Brak następnego rekordu. Koniec.
cojack
Albo wejdź na tu: http://www.cojack.pl/postgresql-ltree/284


Opisane jak tworzyć menu bez znaczenia o ilości zagłębień.
fire_dept
Panowie nie umię zrobić takiej tablicy, jak mówicie, żeby odpowiadała temu co chciałbym uzyskać.
Ja pracuje na SQLite i z tego przykładu z linku nie za bardzo chce działać próbowałem na różne sposoby.

Byłbym niesamowicie wdzięczny gdyby ktoś chociaż zarys kodu mi przedstawił, mnie już boli głowa od 4 godzin próbuję i nic.
cojack
Nie da się tak zrobić jak Ty chcesz. Żeby Ci od razu drzewo wyświetlił z samego selecta. Podejdź do tego tak jak Ci thek napisał.
fire_dept
Cytat(cojack @ 5.02.2010, 13:40:06 ) *
Nie da się tak zrobić jak Ty chcesz. Żeby Ci od razu drzewo wyświetlił z samego selecta. Podejdź do tego tak jak Ci thek napisał.


Ja doskonale wiem, że z samego selecta nie wyciągnę drzewa.

Chodzi mi o to, że próbowałem z tablicami wielowymiarowymi i nie bardzo chciało mi się to wszystko zgrać nie jestem mega mózgiem w PHP i niekiedy dla was prosta rzecz dla mnie będzie nie do przeskoczenia.
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.