Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skomplikowane zapytanie
Bora
post 12.07.2003, 15:32:57
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 questionmark.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
uboottd
post 12.07.2003, 17:18:46
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...
Go to the top of the page
+Quote Post

Posty w temacie


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 - 17:28