mmofacts.com

Query mit IF

gepostet vor 18 Jahre, 9 Monate von The_Alien
In meinem Query

SELECT `user` , `score_all` , `rank` , `allytag` , `score_fight` , `firstlogin` ,

IF ( users . prem > 1139793613 ,
(IFNULL( SUM( aktien . count ) * 2 , 1 ) + users . score_all + ( users . score_sci * 100 ) + ( users . score_fight / 1000 ) + ( users . score_fleet / 1000 ) ) * 1.2 ,
IFNULL( SUM( aktien . count ) * 2 , 1 ) + users . score_all + ( users . score_sci * 100 ) + ( users . score_fight / 1000 ) + ( users . score_fleet / 1000 ) ) AS accw
FROM users
LEFT JOIN aktien ON aktien . userid = users . id
WHERE `lastlogin` > 0 AND `allyid` != '-1' AND users . rank = 0 AND users . allyid >= 0 GROUP BY users . id ORDER BY `accw` DESC


habe ich 2 mal den "IFNULL( SUM( aktien . count ) * 2 , 1 ) + users . score_all + ( users . score_sci * 100 ) + ( users . score_fight / 1000 ) + ( users . score_fleet / 1000 ) " Teil drinne da ich es mit einer IF Anweisung verzweige. Aber muß das wirklich sein oder gibt es da eine einfachere Lösung? Ein "AS bla" und dann in der IF Anweisung mit "bla" arbeitn geht leider nicht da der Wert von AS ja noch unbekannt ist.

Oder gibt es evtl eine allgemeine Möglichkeit das zu verbessern. Es soll einfach ein Wert errechnet werden und den im falle eines gültigen Premiumaccounts mit 1.2 multiplizert werden.
Das "IFNULL" setze ich ein da es auch sein kann das es auf diesen Spieler keine Aktien gibt und mir sonst nur NULL ausgegeben wird.
gepostet vor 18 Jahre, 9 Monate von Krisch
Probier mal:
SELECT `user`, `score_all`, `rank`, `allytag`, `score_fight`, `firstlogin`,

(IFNULL(SUM(aktien.count) * 2,1) + users.score_all +
(users.score_sci * 100) + (users.score_fight / 1000) +
(users.score_fleet / 1000)) * IF(users.prem > 1139793613, 1.2, 1)
AS accw
FROM users
LEFT JOIN aktien ON aktien.userid = users.id
WHERE `lastlogin` > 0 AND
`allyid` != '-1' AND
users.rank = 0 AND
users.allyid >= 0
GROUP BY users.id
ORDER BY `accw` DESC
(Zuviele Leerzeichen machen einen Text übrigens unleserlicher statt übersichtlicher..)

Auf diese Diskussion antworten