Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Złożone zapytanie
Forum PHP.pl > Forum > Bazy danych
C@rdel
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
bela
  1. SELECT *
  2. FROM topics t, posts p LEFT JOIN (p.author=u.id) ON users u

Jeszcze pokombinuj tongue.gif
SongoQ
@bela_666 Najpierw tabela ON zlaczenie.
bela
Możliwe, z palca pisałem ;] Chodziło mi bardziej o sposob
C@rdel
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
SongoQ
  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
NoiseMc
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
SongoQ
@NoiseMc
Cos chyba nie tak z Twoim zapytaniem, te podzapytania zwracaja po 1 rekordzie. Tak raczej nie zadziala.
NoiseMc
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.
SongoQ
Twoje zapytanie dla jednego posts jest ok, ale jesli chcesz pobrac wieksza ilosc to juz bedzie problem.
FiDO
http://forum.php.pl/index.php?showtopic=30749&st=0
Tam problem jest podobny, wystarczy dostosowac do swojej struktury i bedzie smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.