MySQL having težava
4 naročniki
4 naročniki
Imam problem pri sestavi SQL stavka.
Za lažjo predstavo: v tabeli news se nahajajo novice (id, title, dtadded ...), v tabeli newsvotes pa like/dislike posamezne novice (id, newsid, userid, up (1 ali -1) ...). V stavku sicer manjka par pogojev, ki so odstranjeni zaradi preglednosti.
Stavek bi naj vrnil IDje novic, ki imajo razmerje (seštevek glasov / čas od objave) večje od 10 ter jih razporedil po tem pogoju. Order by deluje, težave pa mi povzroča having del.
SELECT n.id
FROM news n
LEFT OUTER JOIN newsvotes nv ON (nv.newsid = n.id)
GROUP BY n.id
HAVING ((SUM(nv.up))/TIMESTAMPDIFF(SECOND, n.dtpublished, NOW())) > '10.0'
ORDER BY ((SUM(nv.up))/TIMESTAMPDIFF(SECOND, n.dtpublished, NOW())) ASC
Ena izmed rešitev je, da nastavim cron in te vrednosti zapišem v tabelo news, vendar v tem primeru nimam live rezultatov, bi pa pridobil na hitrosti (ki pa trenutno ni problem).
Kako rešit problem? Obstaja elegantnejša rešitev?
Hvala za odgovore.
EDiT: MySQL javi 'Unknown column n.dt_published'.'
4 odgovori
Kolikor jaz vem, having gleda po rezultatih in bi moral dat še n.dt_published v select.
Sam to je počasno.
Namesto s cronom lahko ob vsakem votu zapišeš SUM v novico al pa samo prišteješ 1, da ni treba niti SUM-a delat.
Ah, ne morem verjet ... Se mi je zdelo, da bo neka malenkost. Sem dodal še to polje v select in deluje (ne vem, kako mi je to ušlo iz glave).
@Gogy ... Ja, sem napisal samo dtadded, vendar obstaja tudi polje dtpublished.
@blackmamba ... To bi prišlo v poštev, vendar potrebujem datumske rezultate (dnevna, tedenska, mesečna in all-time statistika).
Fantje, hvala!