1

毎日のイベントのリストがあるこのカレンダーがあり、このクエリを使用して特定の日付のイベントをカウントします。私のデータベースには、ユーザーが具体的な資料のスケジュールを持っているフィールドがありますstart_timeend_timeその日のイベントを試してみましselectたが、クエリに問題があるようです。ユーザーは複数の資料を借りることができるため、同じものstart_timeと同様にデータベースに保存されend_timeます。私が望むのは、同じユーザーのすべてのデータをカウントすることです。start_time試してみGROUP BYましたが、うまくいかないようです。ここに私のデータベースがあります:

    ----Table: schedule----
    id    |   materialID  | borrowerID   | date_reserve | start_time | end_time| 
    -----------------------------------------------------------------------------------
    9     |    7          |    bobi      | 2013-08-16   | 07:01:12  |  07:01:12|    
    10    |    10         |    bobi      | 2013-08-16   | 07:01:12  |  07:01:12|
    11    |    12         |    bobi      | 2013-08-16   | 07:01:12  |  07:01:12|
    12    |    7          |    sobi      | 2013-08-18   | 07:01:12  |  07:01:12|
   ------------------------------------------------------------------------------------

これが私のクエリです:

    $cal_data = array();
   for($i=1;$i<=31;$i++)
    {
    $date = "$year-$month-$i";
    $this->db->select('(SELECT COUNT(id) as count_s FROM schedule WHERE date_reserve='.$date.' GROUP BY start_time) as count', FALSE);
    $this->db->select('date_reserve,borrowerID,start_time,end_time');
    $this->db->from('schedule');    
    $this->db->where('date_reserve',"$year-$month-$i"); 
    $this->db->group_by('start_time');
    $query = $this->db->get();

        foreach ($query->result() as $row) {

            $cal_data[$i] = ($row->count > 0) ? $row->count.' ' .'event(s)' : '';
        }
}   

したがって、期待される出力は次のようになります。

    count   |   date_reserve    | borrowerID   | start_time  | end_time
    ---------------------------------------------------------------------------------------------------
        1      |     2013-08-16     |        bobi       |  07:01:12  | 07:01:12

ここには大きなBUTがありますが、そのクエリでこの出力が得られます。注: I'm using CodeIgniter.
サーバー上のMySQLに日付を使用$this->output->enable_profiler(TRUE);して試してみて2013-08-16(複数選択であるため)、これを提供してくれました。

    count   |   date_reserve    | borrowerID   | start_time  | end_time
    ---------------------------------------------------------------------------------------------------
     NULL   |     2013-08-16     |        bobi       |  07:01:12  | 07:01:12

では、これに対する解決策は何だと思いますか?

4

2 に答える 2

1

これはあなたが探しているものですか?

select
count(distinct concat(date_reserve, ' ', start_time)) as my_count,
date_reserve,borrowerID,start_time,end_time
from
schedule
where borrowerID = 'bobi'
  • sqlfiddleで動作するのを見てください
于 2013-08-20T08:38:15.280 に答える