Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Złożone zapytanie
C@rdel
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 14.09.2005

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


Witam, piszę właśnie swoje własne forum [tak bardziej na próbę winksmiley.jpg ] i mam taki problem z połączeniem zapytań w jedno.
Mam trzy tabele [podaje tylko te pola które mają tu znaczenie]:

posts
| ID | author | date | topic |
{ topic oznacza ID tematu }
{ author oznacza ID autora }

topics
| ID | name |

users
| ID | name |

I teraz chciałbym za pomocą jednego zapytania pobrać: nazwy wszystkich tematów, z każdego tematu ostatni post oraz nicka autora tego postu smile.gif

Do tej pory robiłem to tak, że jednym zapytaniem pobieralem tematy, a później dla kazdego oddzielnie ostatni post i autora.
Czy jest to w ogóle możliwe przy użyciu jednego zapytania ?
Pozdrawiam
Go to the top of the page
+Quote Post
bela
post
Post #2


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


  1. SELECT *
  2. FROM topics t, posts p LEFT JOIN (p.author=u.id) ON users u

Jeszcze pokombinuj tongue.gif


--------------------
Go to the top of the page
+Quote Post
SongoQ
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


@bela_666 Najpierw tabela ON zlaczenie.


--------------------
Go to the top of the page
+Quote Post
bela
post
Post #4


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


Możliwe, z palca pisałem ;] Chodziło mi bardziej o sposob


--------------------
Go to the top of the page
+Quote Post
C@rdel
post
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 14.09.2005

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


Jak pobrać te wszystkie dane równocześnie to wiem, tylko nie mam pojęcia jak sprawić, żeby pobrać jeden najnowszy post z każdego tematu Bo normalnie to ORDER BY date LIMIT 1. Ale w takich połączonych to nie wiem sad.gif
Go to the top of the page
+Quote Post
SongoQ
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


  1. SELECT *
  2. FROM posts LEFT JOIN (
  3. SELECT ID, MAX(date) AS date
  4. FROM posts GROUP BY topic
  5. ) t1 ON (t1.topic = topics.ID), users
  6. WHERE users.ID = t1.author


--------------------
Go to the top of the page
+Quote Post
NoiseMc
post
Post #7





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

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


Ja użyłbym podzapytań, niestety działają dopiero od na MySQL 4.1.

Przykładowy kod SQL:
  1. SELECT
  2. t . * ,
  3. (
  4. SELECT p.post_date
  5.  
  6. FROM posts p
  7. WHERE p.topic = t.ID
  8. ORDER BY p.post_date DESC LIMIT 1
  9. ) AS last_post,
  10. (
  11. SELECT u.name
  12.  
  13. FROM users u
  14. INNER JOIN posts p ON p.ID = t.ID
  15. WHERE u.ID = p.author
  16. LIMIT 1
  17. ) AS user_name
  18. FROM topics t


--------------------
Go to the top of the page
+Quote Post
SongoQ
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


@NoiseMc
Cos chyba nie tak z Twoim zapytaniem, te podzapytania zwracaja po 1 rekordzie. Tak raczej nie zadziala.


--------------------
Go to the top of the page
+Quote Post
NoiseMc
post
Post #9





Grupa: Zarejestrowani
Postów: 398
Pomógł: 10
Dołączył: 24.11.2004
Skąd: Łódź

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


Cytat(SongoQ @ 2005-10-04 21:53:21)
@NoiseMc
... te podzapytania zwracaja po 1 rekordzie. Tak raczej nie zadziala.

Kiedyś już musiałem w podobny sposób pobrać pola z kilku tabel i na inny pomysł nie wpadłem, używałem osobnego podzapytania dla każdego pola.
Działało ale nie wiem czy to dobre rozwiązanie.


--------------------
Go to the top of the page
+Quote Post
SongoQ
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Twoje zapytanie dla jednego posts jest ok, ale jesli chcesz pobrac wieksza ilosc to juz bedzie problem.


--------------------
Go to the top of the page
+Quote Post
FiDO
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


http://forum.php.pl/index.php?showtopic=30749&st=0
Tam problem jest podobny, wystarczy dostosowac do swojej struktury i bedzie smile.gif


--------------------
Brak czasu :/
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 Aktualny czas: 21.08.2025 - 21:18