Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]wyciągnięcie danych z bazy i zrobienie z nich menu
lobopol
post 8.01.2010, 13:28:33
Post #1





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


  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

Ten post edytował lobopol 9.01.2010, 12:40:40


--------------------
Go to the top of the page
+Quote Post
Nh2003
post 12.01.2010, 14:01:20
Post #2





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 3.10.2007

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


  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
Go to the top of the page
+Quote Post
kaminskp
post 12.01.2010, 18:09:04
Post #3





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 18.03.2008
Skąd: Olsztyn

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


Czy możesz to opisać Nh2003?
Go to the top of the page
+Quote Post
lobopol
post 12.01.2010, 20:16:36
Post #4





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


Tylko jedno, ale dodam aby poprawnie wyciągać sobie przez php musiałem dodać:
section.id as section_id itd. smile.gif


--------------------
Go to the top of the page
+Quote Post
kaminskp
post 13.01.2010, 12:03:54
Post #5





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 18.03.2008
Skąd: Olsztyn

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


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]
Go to the top of the page
+Quote Post
Nh2003
post 13.01.2010, 13:36:18
Post #6





Grupa: Zarejestrowani
Postów: 81
Pomógł: 14
Dołączył: 3.10.2007

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


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.
Go to the top of the page
+Quote Post
kaminskp
post 13.01.2010, 13:52:48
Post #7





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 18.03.2008
Skąd: Olsztyn

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


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.
Go to the top of the page
+Quote Post
lobopol
post 13.01.2010, 19:05:37
Post #8





Grupa: Zarejestrowani
Postów: 1 729
Pomógł: 346
Dołączył: 4.04.2009

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


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 )


--------------------
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: 14.08.2025 - 14:03