Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kwerenda 3 tabel - jak to ugryźć?
Forum PHP.pl > Forum > Bazy danych > MySQL
thextraman
Witam, mam zapytanie korzystające z 2 tabel zawierających "newsy" i użytkowników, którzy je napisali:

  1. SELECT f.fml_id, body, DATE_FORMAT(fml_postdate, '%d.%m.%Y %T') AS dr, username, f.user_id, f.points
  2. FROM fmls AS f
  3. INNER JOIN users AS u
  4. USING ( user_id )
  5. WHERE approved = 1
  6. ORDER BY dr DESC
  7. LIMIT $start, $display


Chciałbnym do tego dodać jeszcze liczenie liczby rekordów z tabeli komentarze (po jakiejkolwiek kolumnie, a są user_id, comment_is, message, postdate, fml_id)
Próbowałem złączyć tabele zapytaniem INNER JOIN przez pole fml_id, ale mało co wychodzi. I tu mam pytanie: Czy mogę zliczanie komentarzy wcisnąć je tu, czy muszę realizować je w pętli wyświetlającej posty po kolei (straszne zajeżdżanie bazy)
bww
Możesz to zrealizować np. przez stworzenie tak jakby tymczasowej tabeli i zrobienie joina:

  1. JOIN (SELECT id_news, count(*) AS licz
  2. FROM komentarze GROUP BY id_news
  3. ) AS temp ON temp.id_news = news.id_news


A w tym główny select wyciągnąć jeszcze kolumnę temp.licz.
thextraman
ok, wszystko fajnie, ale polecenie wybiera mi z bazy jedynie posty, które mają komentarze smile.gif proszę o sprawdzenie:
  1. SELECT f.fml_id, f.title, body, DATE_FORMAT( fml_postdate, '%d.%m.%Y %T' ) AS dr, username, f.user_id, f.points, temp.licz
  2. FROM fmls AS f
  3. INNER JOIN users AS u
  4. USING ( user_id )
  5. JOIN (
  6. SELECT fml_id, count( post_id ) AS licz
  7. FROM comments
  8. GROUP BY fml_id
  9. ) AS temp ON temp.fml_id = f.fml_id
  10. WHERE approved =1
  11. ORDER BY dr DESC
  12. LIMIT 1 , 10;
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.