2017-02-08 2 views
0

Ich habe eine MySql-Abfrage, die wie folgt aussieht:Werte hinzufügen, wenn die Bedingung Spalte wahr ist

SELECT o.id, 
     o.priorytet_1 + 
     o.priorytet_2 + 
     o.priorytet_3 AS bonus 
FROM obiekty o 
WHERE o.ac=1 
GROUP BY o.id 
ORDER BY `o`.`id` ASC 

neben priorytet_1, priorytet_2 and priorytet_3 Spalten Ich habe priorytet_1_valid, priorytet_2_valid, priorytet_3_valid wo ich Datum speichern, zu denen zum Beispiel priorytet_1 gültig ist.

Und ich möchte nur die Spalten hinzufügen, das ist < now().

Etwas wie:

SELECT o.id, 
     if (o.priorytet_1_valid < now()) o.priorytet_1 + 
     if (o.priorytet_2_valid < now()) o.priorytet_2 + 
     if (o.priorytet_3_valid < now()) o.priorytet_3 AS bonus 
FROM obiekty o 
WHERE o.ac=1 
GROUP BY o.id 
ORDER BY `o`.`id` ASC 

Dank für die Hilfe!

Antwort

0

Versuchen:

SELECT o.id, 
     SUM(IF (o.priorytet_1_valid < NOW(), o.priorytet_1, 0) + 
      IF (o.priorytet_2_valid < NOW(), o.priorytet_2, 0) + 
      IF (o.priorytet_3_valid < NOW(), o.priorytet_3, 0)) AS bonus 
FROM obiekty o 
WHERE o.ac=1 
GROUP BY o.id 
ORDER BY `o`.`id` ASC 

Sie wollen wahrscheinlich SUM verwenden, da Sie eine GROUP BY Klausel haben. Die SUM-Funktion, die in der Abfrage über bedingt verwendet wird, fügt Felder o.priorytet_1, o.priorytet_2, o.priorytet_3 hinzu, wenn das entsprechende "gültige" Feld älter als das aktuelle Datum/die Uhrzeit ist.

Verwandte Themen