Originariamente inviato da optime
metti le due tabelle in JOIN e fai la COUNT / GROUP BY
Già provato:
codice:
SELECT NEWS.ID_NEWS, COUNT(*) AS NUM_COMMENTI
FROM NEWS
INNER JOIN COMMENTS ON NEWS.ID_NEWS = COMMENTS.ID_NEWS
WHERE NEWS.LANG_ita = 0 AND NEWS.TIMESTAMP >= DATE_SUB('2013-01-09', INTERVAL 1 WEEK)
GROUP BY NEWS.ID_NEWS
ORDER BY NUM_COMMENTI DESC
LIMIT 0,5
anche:
codice:
SELECT NEWS.ID_NEWS, SUM(ISNULL(COMMENTS.ID_NEWS)=0) as NUM_COMMENTI
FROM NEWS
INNER JOIN COMMENTS ON COMMENTS.ID_NEWS = NEWS.ID_NEWS
WHERE NEWS.LANG_ita = 0 AND NEWS.TIMESTAMP >= DATE_SUB('2013-01-09', INTERVAL 1 WEEK)
GROUP BY NEWS.ID_NEWS
ORDER BY NUM_COMMENTI DESC
LIMIT 0,5
e pure così:
codice:
SELECT NEWS.ID_NEWS, tmp.NUM_COMMENTI
FROM NEWS
INNER JOIN (SELECT ID_NEWS, COUNT(*) AS NUM_COMMENTI FROM COMMENTS GROUP BY COMMENTS.ID_NEWS) AS tmp
ON NEWS.ID_NEWS = tmp.ID_NEWS
WHERE NEWS.LANG_ita = 0 AND NEWS.TIMESTAMP >= DATE_SUB('2013-01-09', INTERVAL 1 WEEK)
ORDER BY tmp.NUM_COMMENTI DESC
LIMIT 0,5
(ma questa va a cercare tra troppe righe)
funzionano, però in queste maniere peggioro:
codice:
Using where; Using temporary; Using filesort
Nonostante abbia l'indice LANG_ita che comprende ID_NEWS e TIMESTAMP che comprende ID_NEWS