2012-08-13 35 views
6

Tengo la siguiente consulta.mysql - seleccione true cuando count es mayor que cero

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

Ahora, cuando el número es mayor que cero deseo seleccionar true demás false, en lugar de recuento como el resultado de la consulta. ¿Como hacer eso?

Respuesta

14

Prueba esto:

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

Puede usar los valores 'TRUE' /' FALSE' sin comillas en MySQL. –

+1

simplemente devolverá 1 y 0 si no voy a desmarcarlo. –

+0

Sí, lo sé, MySQL no ha implementado el tipo de datos booleano en absoluto y el estándar SQL no lo especifica como obligatorio. Pero aún es mejor que obtener uno de los dos valores de cadena ('verdadero'/'falso'), los cuales se evaluarán como TRUE si están marcados en un lenguaje de programación. –

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 si necesita las palabras true y false

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

¿Por qué utilizar caso cuando 'IF' hubiera sido más corto? –

+1

Puedes elegir cualquiera. Me gusta 'caso' mejor. Eso es todo. –

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