Ok, mi sono informato meglio. In effetti ho commesso degli errori. Chiedo scusa a tutti, ma ero un pò arrugginito.
Allora ho trovato:
---------------------------------
L'operatore GROUP BY serve a raggruppare i risultati di una SELECT in base al campo specificato dopo il BY. L'operatore va usato in congiunzione con una funzione statistica (COUNT, SUM ...) secondo la seguente sintassi:
SELECT <campo>, <funzione stat.>
FROM <tabelle>
[WHERE <condizione>]
GROUP BY <campo>
dove <campo> deve essere lo stesso nella SELECT e nel GROUP BY.
------------------------------------
Quindi nel caso di Tarini
SELECT t.*, UNIX_TIMESTAMP(MAX(p.d)) AS last_post, UNIX_TIMESTAMP(tr.d) AS last_read, UNIX_TIMESTAMP(t.d) AS timestamp, COUNT(p.id) AS count, u.username AS username
FROM topic AS t
LEFT JOIN post AS p ON t.id = p.id_topic
INNER JOIN user AS u ON u.id = t.id_user
LEFT JOIN (SELECT * FROM topic_read WHERE id_user=1) AS tr ON t.id = tr.id_topic
WHERE t.id_section = 6
GROUP BY p.id
ORDER BY t.sticky DESC, MAX(p.d) DESC
nella SELECT ....... il primo campo deve essere quello oggetto del GROUP BY
quindi dovresti avere
SELECT p.id e non SELECT t.*
Invece, per le funzioni di aggregazione:
----------------
Il principio di fondo delle funzioni di aggregazione e della clausola GROUP BY è infatti questo: tutti i campi devono rappresentare un raggruppamento, dettato da un'aggregazione oppure da una clausola GROUP BY.
----------------
Ciao.

Rispondi quotando
Ke goduria!
