perfetto... grazie a tutti ancora![]()
perfetto... grazie a tutti ancora![]()
www.gext.it
ragazzi altro problemino con mysql...
premetto che in locale ho la versione 5.* e sull'hosting la 4.*![]()
![]()
![]()
ecco la query incriminata (è la stessa di ieri un po' piu corposa)
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
in remoto mi da questo errore Invalid use of group function
googlando ho trovato che scaturisce dal fatto che mancano clausola group by in quanto uso funzioni di aggregazione ma onestamente non capisco il perchè... (tantè che sul 5 funziona tutto...)
qualcuno mi da una manina??
hai scritto:
ORDER BY t.sticky DESC, MAX(p.d) DESC
non è ke volevi scrivere MAX(p.id) anziché p.d ?
Anche qui:
UNIX_TIMESTAMP(MAX(p.d))
MAX(p.id) al posto di MAX(p.d)
tranquillo "d" come nome di campo è una mia naming convention per i campi date (che hanno un nome riservato per mysql appunto DATE)
Il problema allora è ke se usi la clausola GROUP BY sulla colonna id, allora puoi usare solo funzioni di aggregazione (nel tuo caso MAX) solo sulla colona id oggetto del GROUP BY ecco perché ti da errore, allora.
A meno ke, se non ricordo male, la colonna su cui esegui MAX() non sia indicizzata.
Quindi puoi usare MAX(UNIX.........(p.d) solo se hai creato un indice su d
Però vedi di fare un controllo su questa cosa perché non ne sono sicuro al 100%
max si può usare sempre indipendentemente dagli indici, ovviamente ci deve essere una group by ma non deve essere nell'elenco dei campi di group by.
Non ho detto quello ho detto che se usi GROUP BY su una colonna allora MAX lo puoi usare solo su quella colonna oppure su un'altra indicizzata.
E' ovvio che se non usi GROUP BY allora puoi usarlo su qualsiasi colonna.
Poi se sbaglio dimmi pure.
gli indici non c'entrano una m...a!
semplicemente fare la max su un campo elencato in group by è scorretto oltre che inutile
probabilmente il problema della query precedente è che usa un campo di group by di una tabella in left join ... non ne sono certo ... non ho provato..
ps se non usi group by a cosa serve la max?