Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQLite]Pobieranie danych z trzech tabeli
fire_dept
post 4.02.2010, 17:23:50
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 3
Dołączył: 4.02.2010

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


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


Go to the top of the page
+Quote Post
zegarek84
post 4.02.2010, 18:20:44
Post #2





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


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:


Ten post edytował zegarek84 4.02.2010, 18:23:19


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
fire_dept
post 4.02.2010, 22:30:58
Post #3





Grupa: Zarejestrowani
Postów: 45
Pomógł: 3
Dołączył: 4.02.2010

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


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

Ten post edytował fire_dept 4.02.2010, 22:37:53
Go to the top of the page
+Quote Post
thek
post 5.02.2010, 08:59:54
Post #4





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




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.


--------------------
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
cojack
post 5.02.2010, 09:16:54
Post #5





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Albo wejdź na tu: http://www.cojack.pl/postgresql-ltree/284


Opisane jak tworzyć menu bez znaczenia o ilości zagłębień.

Ten post edytował cojack 5.02.2010, 09:17:24


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
fire_dept
post 5.02.2010, 13:34:28
Post #6





Grupa: Zarejestrowani
Postów: 45
Pomógł: 3
Dołączył: 4.02.2010

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


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.
Go to the top of the page
+Quote Post
cojack
post 5.02.2010, 13:40:06
Post #7





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


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ł.


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
fire_dept
post 5.02.2010, 16:48:00
Post #8





Grupa: Zarejestrowani
Postów: 45
Pomógł: 3
Dołączył: 4.02.2010

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


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.
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: 6.07.2025 - 05:01