Mam następujący problem - mam dwie tabele, ratings oraz articles. Potrzebuję jakimś zapytaniem wyciągnąć z tabeli articles dane dot. artykułu, dołożyć do tego kolumnę zawierającą liczbę użytkowników którzy oceniło dany artykuł, oraz posortować wg. niej. Przykładowe dane:
Kod
Articles
------
| id |
------
| 1 |
Ratings
-------------------------------------------------------
| id | type | article_id | user_id | value |
-------------------------------------------------------
| 1 | 1 | 1 | 1 | 5 |
| 2 | 2 | 1 | 1 | 8 |
| 3 | 1 | 1 | 2 | 7 |
| 4 | 2 | 1 | 2 | 9 |
| 5 | 1 | 1 | 3 | 4 |
| 6 | 2 | 1 | 3 | 2 |
------
| id |
------
| 1 |
Ratings
-------------------------------------------------------
| id | type | article_id | user_id | value |
-------------------------------------------------------
| 1 | 1 | 1 | 1 | 5 |
| 2 | 2 | 1 | 1 | 8 |
| 3 | 1 | 1 | 2 | 7 |
| 4 | 2 | 1 | 2 | 9 |
| 5 | 1 | 1 | 3 | 4 |
| 6 | 2 | 1 | 3 | 2 |
Chciałbym żeby zapytanie zwróciło mi coś takiego:
Kod
Articles
-----------------------------
| id | ratings_count |
-----------------------------
| 1 | 3 |
-----------------------------
| id | ratings_count |
-----------------------------
| 1 | 3 |
Dlaczego 3? Trzech użytkowników oceniło artykuł wg różnych kryteriów (kolumna type). Do tej pory wykombinowałem takie zapytanie:
SELECT article.*, count(*) AS ratings_count FROM article LEFT JOIN rating ON (article_id=article.id) GROUP BY article.id, ORDER BY ratings_count DESC;
Niestety zwraca mi to jedynie ile jest wpisów dotyczących danego artykułu, w tym wypadku będzie to 6, nie 3. Dodatkowo przy występowaniu innych kolumn w tabeli Articles musiałbym je dołożyć do Group By co wydajności raczej nie poprawi. Ktoś ma jakiś pomysł?