Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Zaliczenie rekordów z warunkiem IN (SQL z 3 tabelami)
Forum PHP.pl > Forum > Bazy danych > MySQL
shpyo
Hej,
mam problem z jednym zapytaniem.

Chcę pobrać wpisy z bloga, które zawierają jeden z podanych tagów (id) i dodatkowo do każdego wpisu zliczyć komentarze.

Mam takie tabele:
news:
id, title, slug, lead, ...

comments:
id, news_id, author, comment, ...

tags:
id, name

tags_news:
tag_id, news_id

Składanie SQL zacząłem od prostego:

  1. SELECT
  2. *
  3. FROM
  4. tags_news
  5. WHERE
  6. tag_id IN ([list idków]]);


I ładnie zwraca mi IDki newsów.

Potem już konkretniejsze dane - informacje o wpisach:
  1. SELECT
  2. tn . * ,
  3. n.id,
  4. n.title,
  5. n.slug,
  6. n.lead
  7. FROM
  8. tags_news tn,
  9. news n
  10. WHERE
  11. tn.tag_id
  12. IN ( [list IDków] )
  13. AND n.id = tn.news_id
  14. GROUP BY
  15. tn.news_id
  16. ORDER BY
  17. n.id DESC;


I tutaj jest problem z pobraniem komentarzy dla każdego wpisu.
Jak do selecta dodam COUNT(c.id) AS news_comments, dodam tabelę comments c i warunek dam AND c.news_id = n.id to zwraca mi dziwne liczby. Potrzebuję jeszcze jednego lub kilku warunków by zawężyć zapytanie? Gdy podam małą liczbę IDków (2) tagów do warunku IN, to dobrze zlicza, przy większej liczbie (>3) jest już problem.
trueblue
  1. COUNT(DISTINCT c.id) AS news_comments
?
shpyo
@trueblue: tak 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.