2012-02-06 2 views
0

Все, У меня есть следующий код:Определите, сколько записей существуют на определенную дату

$fetch = mysql_query("SELECT * FROM calendar_events where event_status='booked' and event_type='wedding' GROUP BY start"); 
while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) { 
    $row_array['id'] = $row['id']; 
    $row_array['title'] = $row['title']; 
    $row_array['start'] = $row['start']; 
    $row_array['end'] = $row['end']; 
    array_push($return_arr,$row_array); 
} 
echo json_encode($return_arr); 

Я использую fullcalendar и пытаюсь определить, сколько событий имеет одинаковую начальную дату. Так, например, если бы я имел следующие даты:

02/06/2012
02/06/2012
03/01/2012
04/05/2012

по датам, которые имеют записи в моя база данных Я бы хотел в основном посмотреть, сколько событий в эту дату и в основном сказать, сколько пятен осталось. Поэтому для любой даты я могу провести два запланированных мероприятия, поэтому на 02/06/2012 я бы хотел, чтобы он вернулся «Забронировано» и на 03/01/2012 мне бы хотелось «1 пятно слева» и т. Д.

Как я могу сделать что-то подобное?

Спасибо!

ответ

1
SELECT 
start, count(*) as used, 2-count(*) as free 
FROM calendar_events 
WHERE event_status='booked' 
    and event_type='wedding' 
GROUP BY start 

или ваш комментарий:

SELECT 
date(start) as eventdate, count(*) as used, 2-count(*) as free 
FROM calendar_events 
WHERE event_status='booked' 
    and event_type='wedding' 
GROUP BY date(start) 
+0

Спасибо, что работает хорошо, однако у меня есть только одна проблема. Мои данные хранятся как DATETIME, поэтому запись также имеет временную метку, которая заставляет ее не думать, что в тот же день есть два. Любая идея, как это объяснить? – user1048676

+0

@ user1048676 отредактировал мой ответ –

0

Вы почти там, но вы хотите использовать COUNT(*) вернуть число записей в группе. (Не забудьте указать в столбце псевдоним, чтобы вы могли его получить.) Вы также должны ограничить себя извлечением только столбца start, так как извлечение столбцов, не входящих в предложение GROUP BY, является нестандартным.

0

Вы почти закончили, так как другие избили меня до удара. Вы можете попробовать что-то вроде этого. Важная часть - просто иметь счет, как упоминалось.

$fetch = mysql_query("SELECT id,title,start,end,count(*) as filled FROM calendar_events where event_status='booked' and event_type='wedding' GROUP BY start"); 
while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) { 
    $row_array['id'] = $row['id']; 
    $row_array['title'] = $row['title']; 
    $row_array['start'] = $row['start']; 
    $row_array['end'] = $row['end']; 
    $row_array['filled'] = $row['filled']; 
    $row_array['booked'] = ($row['filled'] >= 2) ? true : false; 

    array_push($return_arr,$row_array); 
} 
echo json_encode($return_arr); 
Смежные вопросы