use*_*664 5 php mysql select date
我正在向用户显示当前周事件..从当前日期获取数据到当前日期值的+7天..它通过使用这些查询获得
SELECT * from events WHERE ( start_date BETWEEN '2013-01-01' AND '2013-01-07' ) order by start_date ASC
Run Code Online (Sandbox Code Playgroud)
我有问题,如果,
start_date 2013-01-01 have 10 records
start_date 2013-01-02 have 1 records
start_date 2013-01-03 have 12 records
....
...
Run Code Online (Sandbox Code Playgroud)
那么从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
Run Code Online (Sandbox Code Playgroud)
预期产量为,
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
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助解决这些... 单个查询可能
这个查询应该有效
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
Run Code Online (Sandbox Code Playgroud)
这将在每个日期获取 3 条记录。如果你想应用where条件根据你的需要取消注释
输出
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
Run Code Online (Sandbox Code Playgroud)