Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]wyciągnięcie danych z bazy i zrobienie z nich menu
Forum PHP.pl > Forum > Bazy danych > MySQL
lobopol
  1. --tabela łącząca właściciela ze swoją stroną
  2. CREATE TABLE `site` (
  3. `id` int(11) NOT NULL AUTO_INCREMENT,
  4. `user_id` int(11) NOT NULL,
  5. PRIMARY KEY (`id`),
  6. UNIQUE KEY `user_id` (`user_id`),
  7. CONSTRAINT `user_ids` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  9.  
  10. --
  11. CREATE TABLE `section` (
  12. `id` int(11) NOT NULL AUTO_INCREMENT,
  13. `site_id` int(11) NOT NULL,
  14. `name` varchar(255) NOT NULL,
  15. `section_position` int(11) NOT NULL,
  16. PRIMARY KEY (`id`),
  17. KEY `site_id` (`site_id`),
  18. CONSTRAINT `site_id` FOREIGN KEY (`site_id`) REFERENCES `site` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
  19. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  20.  
  21.  
  22. CREATE TABLE `page` (
  23. `id` int(11) NOT NULL AUTO_INCREMENT,
  24. `section_id` int(11) NOT NULL,
  25. `name` varchar(255) NOT NULL,
  26. `position` int(11) NOT NULL,
  27. PRIMARY KEY (`id`),
  28. KEY `section_id` (`section_id`),
  29. CONSTRAINT `section_id` FOREIGN KEY (`section_id`) REFERENCES `section` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
  30. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  31.  
  32.  
  33.  


W skrócie menu miałoby wyglądać:


site_id (zależnie od tego miałoby wyciągać sekcje, a na podstawie sekcji wyciąganie stron


SECTION position 1 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje)
page position 1 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją 1
page position 2 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją 1
page position 3 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją 1
SECTION position 2 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje)
page position 1 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją 2
page position 2 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją 2
page position 3 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją 2
.
.
.
SECTION position ostatnia (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje)
page position 1 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją ostatnia
page position 2 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją ostatnia
page position 3 (bądź najmniejszą istniejącą następną w wypadku gdy ta pozycja już nie istnieje) gdzie section_id = id sekcji z pozycją ostatnia


Jakie zapytanie do tego ułożyć i jak to w miarę dobrze wyświetlić pętlą

Ok to może inaczej postanowiłem to rozbić na 2 zapytania z pierwszym nie mam problemu :
wyciągnięcie sekcji
SELECT * FROM section where site_id='1' ORDER BY `section_position`;

ale z drugim zapytaniem mam już problem bo nie wiem jak wyciągnąć strony których section_id ma przypisane site_id='1'
zapytanie
SELECT page.id, page.name from page, section where section.site_id='1' podwaja mi wyniki
Nh2003
  1. SELECT
  2. site.id,
  3. section.id,
  4. section.name,
  5. section.section_position,
  6. page.id,
  7. page.name,
  8. page.`position`
  9. FROM
  10. site
  11. INNER JOIN section ON site.id = section.site_id
  12. INNER JOIN page ON section.id = page.section_id
  13. WHERE
  14. site.id = '1'
  15. ORDER BY
  16. section.section_position ASC,
  17. page.`position` ASC
kaminskp
Czy możesz to opisać Nh2003?
lobopol
Tylko jedno, ale dodam aby poprawnie wyciągać sobie przez php musiałem dodać:
section.id as section_id itd. smile.gif
kaminskp
Mam podobny problem jak kolega:
Tabela
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`wyiksztalcenie` varchar(255) NOT NULL,
PRIMARY KEY (`id`),

Chcę wyciągnć dane z bazy i zrobić z nich menu.
Będzie ono służyło do tego kiedy trzeba będzie podać wykształcenie to się je wybiera.
W tabeli zamiast wykształcenia podaje się jego id.
Oprucz tego aby rozwijać pobrane dane z tabeli to pobrać id i zapisać w innej tabeli.[php][/php]
Nh2003
Cytat(kaminskp @ 13.01.2010, 12:03:54 ) *
Mam podobny problem jak kolega:
Tabela
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`wyiksztalcenie` varchar(255) NOT NULL,
PRIMARY KEY (`id`),

Chcę wyciągnć dane z bazy i zrobić z nich menu.
Będzie ono służyło do tego kiedy trzeba będzie podać wykształcenie to się je wybiera.
W tabeli zamiast wykształcenia podaje się jego id.
Oprucz tego aby rozwijać pobrane dane z tabeli to pobrać id i zapisać w innej tabeli.[php][/php]


Szczerze mówiąc to nie za bardzo rozumiem o co chodzi. Jakbys mogl to troche bardziej klarownie opisac to moze bede w stanie pomoc.
kaminskp
Nie wie czy Ci dobrze opiszę swój problem.
Mam bazę która zbudowana jest z wielu tabel.
Jedna tabela jest w relacji z innymi wieloma.
Tabela ta ma informacje o osobach.
Dla przykładu kiedy się wypełnia informacje o wykształceniu
system wyświetla typy wykształcenia które pobrał z innej tabel wraz z id.
Jeśli wybierzemy odpowiednie wykształcenie to id dla wybranego wykształcenia będzie zapisane w tabeli
z informacjami o tej osobie.
lobopol
A może mógłbyś przedstawić strukturę bazy i dane jakie chcesz wyciągać. Bo naprawdę ciężko ciebie zrozumieć.

Na razie rozumiem, że masz jakąś tabelę o mniej więcej takiej strukturze
wykształcenie
id
zawartość_wykształcenie

i powiedzmy drugą tabelę
users
id
wykształcenie_id klucz obcy
reszta danych

i chciałbyś dodawać do bazy przez php w łatwy sposób nowych userów albo ich edytować w formie listy rozwijanej najprawdopodobniej

aby taką listę zrobić wystarczy, że wyciągniesz z bazy poleceniem select * from wyksztalcenie
i zrobisz np. tak listę:
  1. <form action="cel.php" method="post">
  2. <select name="list">
  3. <?php
  4. foreach($tabela as $key){
  5. echo '<option value="'.$key['id'].'">'.$key['login'];
  6. }
  7. ?>
  8. </select>
  9. <input type="submit" value="wyślij" />
  10. </form>
i teraz przy submicie dostajesz wartosc $_POST['list'] z wartością wybranego wykształcenia (oczywiście trzeba o sobie jeszcze zabezpieczyć smile.gif )
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-2024 Invision Power Services, Inc.