MySQL having težava
 
schtr4jh 28. jan 2013 19:25:36 Pridružen od:
24. nov 2008
402 objav
322 33 4
#1

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.dt
published, 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'.'


všeč(0) ni všeč(0) spam(0)
 
Gogy 28. jan 2013 19:39:41 Pridružen od:
17. mar 2007
2491 objav
2064 252 12
#2

morda dtadded namesto dtpublished?



Razen če dt_published obstaja ločeno in delaš po njem?


všeč(1) ni všeč(0) spam(0)
 
blackmamba 28. jan 2013 19:42:06 Pridružen od:
4. mar 2008
559 objav
392 25 11
#3

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.


všeč(2) ni všeč(0) spam(0)
 
SlimDeluxe 28. jan 2013 19:53:04 Pridružen od:
29. apr 2010
1223 objav
1022 144 9
#4

Ja, karkoli imaš v HAVING moraš izbrati s SELECT (npr. * ali eksplicitno tisti stolpec).


všeč(2) ni všeč(0) spam(0)
Freelance Web Developer
 
schtr4jh 28. jan 2013 20:11:09 Pridružen od:
24. nov 2008
402 objav
322 33 4
#5

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!


všeč(0) ni všeč(0) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se