2012-08-13 10 views
6

Ich habe die folgende Abfrage.mysql - Wählen Sie wahr, wenn die Anzahl größer als 0 ist

SELECT COUNT(*) AS offer_count 
    FROM restaurants_offers 
WHERE DATE(NOW()) 
    BETWEEN date_start 
    AND date_end 
AND restaurant_id =1 

Wenn nun Zahl größer als Null ist möchte ich true sonst false, statt zählen als Abfrageergebnis auszuwählen. Wie geht das?

Antwort

14

Try this:

SELECT IF(COUNT(*) > 0, 'true', 'false') AS NewResult 
    FROM restaurants_offers 
WHERE (DATE(NOW()) BETWEEN date_start AND date_end) AND 
     restaurant_id = 1 
+1

Sie können die nicht angegebenen 'TRUE' /' FALSE' Werte in MySQL verwenden. –

+1

es wird einfach 1 und 0 zurückgeben, wenn ich es nicht aufheben werde. –

+0

Ja, ich weiß, MySQL hat den booleschen Datentyp überhaupt nicht implementiert und der SQL-Standard spezifiziert ihn nicht als Muss. Aber es ist immer noch besser, als einen von zwei String-Werten ('true'/'false') zu erhalten, die beide zu TRUE ausgewertet werden, wenn sie in einer Programmiersprache überprüft werden. –

1
SELECT case when COUNT(*) > 0 
      then 1 
      else 0 
     end AS offer_count 
FROM restaurants_offers 
WHERE DATE(NOW()) 
BETWEEN date_start 
AND date_end 
AND restaurant_id =1 

oder wenn Sie die Worte true und false

SELECT case when COUNT(*) > 0 
      then 'true' 
      else 'false' 
     end AS offer_count 
... 
+0

Warum Anwendungsfall, wenn 'IF' kürzer gewesen wäre? –

+1

Sie können entweder wählen. Ich mag 'Case' besser. Das ist alles. –

1
SELECT COUNT(*) > 0 AS has_offers 
    FROM restaurants_offers 
WHERE DATE(NOW()) 
    BETWEEN date_start 
    AND date_end 
AND restaurant_id =1 
Verwandte Themen