5

私は現在の週のイベントをユーザーに表示しています..現在の日付から現在の日付値の+7日までのデータを取得しています..これらのクエリを使用して達成しました

SELECT * from events WHERE ( start_date BETWEEN '2013-01-01' AND '2013-01-07' ) order by start_date ASC

私は問題を抱えています

start_date 2013-01-01 have 10 records
start_date 2013-01-02 have 1 records
start_date 2013-01-03 have 12 records
....
...

その後、DBからデータをフェッチするのにより多くの時間がかかります..そのため、毎日3つのデータフォームのみを表示する必要があります

私の食卓、

id      start_date      end_date        event_title

1       2013-01-01      2013-01-03      event_1
2       2013-01-01      2013-01-01      event_2
3       2013-01-01      2013-01-01      event_3
4       2013-01-01      2013-01-01      event_4
-       2013-01-01      2013-01-01      event_4
-       2013-01-01      2013-01-01      event_4

5       2013-01-02      2013-01-02      event_5

6       2013-01-03      2013-01-03      event_6
7       2013-01-03      2013-01-03      event_7
8       2013-01-03      2013-01-03      event_8
9       2013-01-03      2013-01-03      event_9

10      2013-01-04      2013-01-04      event_10

として期待される出力、

id      start_date      end_date        event_title

1       2013-01-01      2013-01-03      event_1
2       2013-01-01      2013-01-01      event_2
3       2013-01-01      2013-01-01      event_3

4       2013-01-02      2013-01-02      event_5

5       2013-01-03      2013-01-03      event_6
6       2013-01-03      2013-01-03      event_7
7       2013-01-03      2013-01-03      event_8

8       2013-01-04      2013-01-04      event_10

誰でもこれらを解決できますか... 単一のクエリで可能です

4

2 に答える 2

4

このクエリは機能するはずです

SET @level = 0;
SET @group = '';
SELECT 
    *
FROM (
    SELECT 
        id,
        start_date,
        end_date,
        event_title,
        @level := IF(@group = start_date, @level+1, 1) AS LEVEL, 
        @group := start_date AS StartDate
    FROM test
    /*WHERE start_date BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 7 DAY)*/
    ORDER BY start_date 
) rs
WHERE LEVEL < 4 

これにより、日付ごとに 3 つのレコードが取得されます。条件を適用したい場合は、必要に応じてコメントを外してください

デモ

出力

id  start_date  end_date    event_title level StartDate 
1   2013-01-01  2013-01-03  event_1     1   2013-01-01 
2   2013-01-01  2013-01-01  event_2     2   2013-01-01 
3   2013-01-01  2013-01-01  event_3     3   2013-01-01 
7   2013-01-02  2013-01-02  event_5     1   2013-01-02 
8   2013-01-03  2013-01-03  event_6     1   2013-01-03 
9   2013-01-03  2013-01-03  event_7     2   2013-01-03 
10  2013-01-03  2013-01-03  event_8     3   2013-01-03 
12  2013-01-04  2013-01-04  event_10    1   2013-01-04 
于 2013-01-10T07:00:12.263 に答える
2

これを試して:

SELECT id, start_date, end_date, event_title 
FROM (SELECT id, start_date, end_date, event_title, 
             IF(@lastDate=(@lastDate:=start_date), @auto:=@auto+1, @auto:=0) autoCol 
      FROM events e, (SELECT @lastDate:='', @auto:=0) A 
      WHERE start_date BETWEEN '2013-01-01' AND '2013-01-07' 
      ORDER BY start_date ASC) A 
WHERE autoCol < 3;

このリンクを確認してくださいSQL FIDDLE DEMO

出力

id  start_date  end_date    event_title 
1   2013-01-01  2013-01-03  event_1     
2   2013-01-01  2013-01-01  event_2     
3   2013-01-01  2013-01-01  event_3     
7   2013-01-02  2013-01-02  event_5     
8   2013-01-03  2013-01-03  event_6     
9   2013-01-03  2013-01-03  event_7     
10  2013-01-03  2013-01-03  event_8     
12  2013-01-04  2013-01-04  event_10    
于 2013-01-10T06:29:11.923 に答える