![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 15.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
Moja struktuta bazy:
[sql:1:fb5ad8cc22] CREATE TABLE `forum_tematy` ( `id` int(5) NOT NULL auto_increment, `autor` varchar(50) NOT NULL default '', `tytul` varchar(100) NOT NULL default '', `tresc` text NOT NULL, KEY `id` (`id`) ) TYPE=MyISAM AUTO_INCREMENT=37 ; CREATE TABLE `forum_wpisy` ( `id` int(5) NOT NULL auto_increment, `forum` int(5) NOT NULL default '0', `temat` int(5) NOT NULL default '0', `autor` varchar(50) NOT NULL default '', `tresc` text NOT NULL, KEY `id` (`id`) ) TYPE=MyISAM AUTO_INCREMENT=147 ; [/sql:1:fb5ad8cc22] chce pobrać jeden wpis z forum_tematy i wszystkie mu odpowiadające wpisy w forum_wpisy. Bazy te są powiacane poprzez forum.tematy.id i forum_wpisy.forum Próbowałem wiele sposobów jednak żaden nie działa do końca poprawnie. [sql:1:fb5ad8cc22] SELECT * FROM forum_tematy LEFT JOIN forum_wpisy on forum_tematy.id = forum_wpisy.temat WHERE forum_tematy.id='10' [/sql:1:fb5ad8cc22] podobnie [sql:1:fb5ad8cc22] SELECT t1.*, t2.* FROM forum_tematy t1, forum_wpisy t2 WHERE t1.id='10' [/sql:1:fb5ad8cc22] Jak powinno wyglądać poprawne zapytanie (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
po pierwsze. zmien strukture tabeli. Pole forum umiesc w tabeli forum_tematy.
po drugie w obu tabelach masz pola id, wiec nie wiem jak Cie baza traktuje, ale ja bym Ci poradzil wypisac kazde pole oddzielnie i ewentualnie zaliasowac. A ja to bym zrobil to na chama:[sql:1:92c2212ea6]SELECT forum_wpisy.wszystkie, forum_tematy.pola, forum_tematy.wylistowane FROM forum_tematy CROSS JOIN forum_wpisy HAVING forum_tematy.id = "jakies_tam_id"::INT;[/sql:1:92c2212ea6]Oczywiscie przerob sobie jakies tam id na id i usun definicje typu. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 384 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Chorzow Ostrzeżenie: (0%) ![]() ![]() |
Cytat po pierwsze. zmien strukture tabeli. Pole forum umiesc w tabeli forum_tematy.
Po jakiego grzyba ? 8O Dobrze ma. Wlasnie tak powinien to zdefiniowac. Cytat po drugie w obu tabelach masz pola id, wiec nie wiem jak Cie baza traktuje, ale ja bym Ci poradzil wypisac kazde pole oddzielnie i ewentualnie zaliasowac.
Jak stosuje * to nie ma znaczenia. Dostanie w wyniku oba pola, tyle ze php je wcisnie do jednego pola w fetch_object/fetch_array, ale fetch_row da je oddzielnie AFAIR. Bora: Mozesz powiedziec co Ci nie pasuje w tych zapytaniam (no w drugim to moze nie musisz), i jak wygladalby przekladowy wynik ktory chcialbys uzyskac ? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 15.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
Jest to forum chce żeby wyświetliło dany temat i wszystkie odpowiwdające mu odpowiedzi.
Podane przezemnie sposoby powodują że to wszystko jest łączone w jeden rekord, a ja chce wszystkie rekordy odpowiadające warunkowi: forum_tematy.id=$nr forum_wpisy.forum=forum_tematy.id |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 384 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Chorzow Ostrzeżenie: (0%) ![]() ![]() |
To jednym zapytaniem tego nie zrobisz. W zapytaniu nie mozna nagle zmieniac tabel, czy ilosci/rodzajow rekordow. Wszystkie rekordy ktore zwraca Ci baza danych musza miec dokladnie taka sama postac i ich dane pochodzic z tego samego zrodla. Takze jesli chcesz dostac jeden wiersz odpowiadajacy danym forumu i n-wierszy danych wpisow w tch forumach to to musza byc dwa zapytania.
Jesli koniecznie zalezy Ci na jednym zapytaniu to mozesz sprobowac takie dwa sposoby: 1. Dajesz takie zapytanie jak Twoje pierwsze. Dostajesz n-wiersz odpowiadajacych poszczegolnym wpisom (lub co najmniej jeden jesli nie ma wpisow ale jest forum). Nastepnie pobierasz pierwszy wiersz, wykorzystujesz z niego czesc danych odpowiadajacych o forum, cos tam z nimi robisz, przewijasz wynik na poczatek i wchodzisz do petli wykorzystujacej dane o wpisach w forum po prostu ignorujac nadmiarowe dane. 2. To w zasadzie sa dwa zapytania, tyle ze polaczone w jedno: [sql:1:91bd3aedf7] SELECT id, autor, tytul, tresc FROM forum_tematy WHERE id=23 UNION ALL SELECT id, autor, temat, tresc FROM forum_wpisy WHERE forum=23 [/sql:1:91bd3aedf7] Oba select musza miec dokladnie taka sama ilosc i typ wartosci zwracanych. PS. Ale gupio podswielil UNION... |
|
|
![]()
Post
#6
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
To jak to ma wygladac? Czyli tutaj pole forum oznacza temat? Ale co w takim razie oznacza pole temat?
Cytat PS. Ale gupio podswielil UNION... to ty nie widziales jak on podswietla plppgsql.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 384 Pomógł: 0 Dołączył: 3.04.2003 Skąd: Chorzow Ostrzeżenie: (0%) ![]() ![]() |
W temacie pola temat pogadaj ze scannerem i jego kula (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Ale Bora wyraznie napisal ze laczy to polem forum i na tym sie oparlem. Co prawda w zapytaniu uzyl pola temat, ale to po prostu niech sie zdecyduje (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 12:57 |