2012-08-13 35 views
6

Aşağıdaki sorguyu kullanıyorum. sayım sıfırdan büyük olduğu zamanmysql - sayım sıfırdan büyükse doğru seç

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

Şimdi, bunun yerine sorgu sonucunda sayımı, true başka false seçmek istiyor. Bu nasıl yapılır?

cevap

14

bu deneyin gerekirse: `IF` kısa olurdu

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

MySQL'de "HIZLI"/"FALSE" değerlerini kullanamazsınız. –

+1

, eğer seçmeme izin vermezse 1 ve 0 döndürür. –

+0

Evet Biliyorum, MySQL, boole veri türünü hiç uygulamamıştır ve SQL standardı zorunlu olarak belirtmez. Fakat yine de, bir programlama dilinde kontrol edilirse, her ikisi de TRUE olarak değerlendirilecek olan iki string değerinden ('true'/'false') birini almaktan daha iyidir. –

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 

veya kelimeleri true ve false

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

neden kullanılır durumda? –

+1

Ya birini seçebilirsiniz. Davayı daha çok seviyorum. Bu kadar. –

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