2012-08-13 9 views
6

Ho la seguente query.mysql: selezionare true quando il conteggio è maggiore di zero

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

Ora, quando il contatore è maggiore di zero voglio selezionare true altro false, invece che contano come il risultato della query. Come farlo?

risposta

14

Prova questo:

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

È possibile utilizzare valori non quotati 'TRUE' /' FALSE' in MySQL. –

+1

restituirà semplicemente 1 e 0 se non lo annullo. –

+0

Sì, lo so, MySQL non ha implementato il tipo di dati booleano e lo standard SQL non lo specifica come un dovere. Ma è ancora meglio che ottenere uno dei due valori di stringa ('true'/'false') entrambi valutano su TRUE se spuntati in un linguaggio di programmazione. –

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 

o se è necessario le parole true e false

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

Perché caso d'uso in cui 'IF' Sarebbe stato più breve? –

+1

Puoi scegliere. Mi piace 'caso' meglio. È tutto. –

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