Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kwerenda 3 tabel - jak to ugryźć?
thextraman
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 26.02.2012

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


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)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
bww
post
Post #2





Grupa: Zarejestrowani
Postów: 42
Pomógł: 3
Dołączył: 14.02.2012

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


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.
Go to the top of the page
+Quote Post
thextraman
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 26.02.2012

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


ok, wszystko fajnie, ale polecenie wybiera mi z bazy jedynie posty, które mają komentarze (IMG:style_emoticons/default/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;


Ten post edytował thextraman 3.05.2012, 10:38:58
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 15:22