![]() |
![]() |
![]()
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 ![]() |
|
|
![]() |
![]()
Post
#2
|
|
![]() 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... |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 17:28 |