2015-07-14 10 views
0

у меня есть настройки данных таблицы со столбцами:.Получение True/False Результат от MySql запросов для нескольких значений

id 
person 
theDate 

Каждая строка будет представлять собой фиксирование от person и дату, когда человек проверяется в каждом Checkin будет быть новой строкой, и никогда не будет более одной проверки в день на человека.

То, что я пытаюсь достичь запрос MySQL, который может сделать следующее:

  1. Проверьте, чтобы увидеть, если есть строка со вчерашнего дня WHERE person='BOB' AND theDate=subdate(CURDATE(), 1) и если есть строка, возврат true, в противном случае, возврат false.
  2. Проверьте, есть ли строка из двух дней назад WHERE person='BOB' AND theDate=subdate(CURDATE(), 2), и если есть строка, верните true, в противном случае верните false.
  3. Проверьте, есть ли следующая строка с сегодняшнего дня WHERE person='BOB' AND theDate=CURDATE(), и если есть строка, верните true, в противном случае верните false.

Я понимаю, что могу просто сделать три отдельных запроса и сделать подсчет строк и сохранить результат в переменной; однако, я думаю, что это было бы более эффективно для одного запроса.

Требование к булевому также не фиксировано. A 1 вместо true будет делать то же самое.

Мое предположение было бы сделать следующее, но это явно не работает:

SELECT (SELECT COUNT('id') FROM timecard WHERE theDate = subdate(CURDATE(), 1)) as yesterday, (SELECT COUNT('id') FROM timecard WHERE theDate = subdate(CURDATE(), 2)) as twodays , (SELECT COUNT('id') FROM timecard WHERE theDate = CURDATE()) as today 
+0

в то время как это может быть сделано в запросе. имеет смысл поставить всю логику на db –

ответ

0
select sum(theDate = subdate(CURDATE(), 2)) > 0 as two_days_ago, 
     sum(theDate = subdate(CURDATE(), 1)) > 0 as yesterday,   
     sum(theDate = CURDATE()) > 0 as today 
from your_table 
where person = 'BOB' 
+0

Протестировано и работает точно так, как мне было нужно. Благодарю. Но, так я могу узнать, я знаю, что когда я 'sum' по столбцу, он дает мне сумму этого столбца, но выполнение' sum' выражения меня немного сбивает с толку. Делает ли это мини-'WHERE' внутри каждой суммы? –

+0

Условие в sum() оценивается как 'true' или' false', которое является '1' и' 0' в MySQL. Он суммирует эти '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' –