php mysql asc/desc顺序

php mysql asc/desc顺序,php,mysql,sql,date,group-by,Php,Mysql,Sql,Date,Group By,表: PHP HTML结果: $q = $mysqli->query("SELECT * FROM bookslot LEFT JOIN timeslot ON bookslot.id_timeslot = timeslot.id_timeslot WHERE bookslot.status = 1 GROUP BY bookslot.b_ref ORDER BY bookslot.date ASC, bookslot.id_timeslot ASC LIMIT 20");

表:

PHP

HTML结果:

$q = $mysqli->query("SELECT * FROM bookslot  
LEFT JOIN timeslot ON bookslot.id_timeslot = timeslot.id_timeslot   
WHERE bookslot.status = 1 
GROUP BY bookslot.b_ref  
ORDER BY bookslot.date ASC, bookslot.id_timeslot ASC LIMIT 20");
有人注意到桌子上的结果。时间顺序不正确?
我用ASC/DESC改变了另一种方式,仍然显示最后一个id\u时隙的时间

预期结果:

DATE         TIMES  
2010-02-22   10:30
2010-02-25   09:30
2010-02-27   11:00

您的
按书店分组。b_ref
正在对记录进行分组,因此您只能看到每个案例的最后一次

试用

DATE         TIMES  
2010-02-22   09:30
2010-02-25   09:30
2010-02-27   10:00

虽然SQL在语法上是正确的,但它会产生意外的结果

通常,
选择的列必须在
GROUP BY
子句中指定,或者应该包含在聚合函数中。否则,MySQL将自行决定通过
操作在
组中删除哪些记录。
ORDER BY
并不重要,因为它是在
GROUP BY
操作之后应用的。您最好像这样修改您的查询:

SELECT date, time, MIN(bookslot.id_timeslot)
FROM bookslot  
LEFT JOIN timeslot ON bookslot.id_timeslot = timeslot.id_timeslot   
WHERE bookslot.status = 1 
GROUP BY bookslot.b_ref  
ORDER BY bookslot.date ASC, bookslot.id_timeslot ASC LIMIT 20

由于目标似乎是为每个书店收集最早的时间段,因此需要使用
MIN

SELECT b_ref, MIN(ADDTIME(date, times)) AS complete_datetime
FROM bookslot
LEFT JOIN timeslot ON bookslot.id_timeslot = timeslot.id_timeslot
WHERE bookslot.status = 1
GROUP BY bookslot.b_ref
ORDER BY bookslot.date, bookslot.id_timeslot

据我所知,这是正确的,
2010-02-22 10:30
出现在
2010-02-25 09:30
2010-02-27 11:00
之前。好吧,我找不到你想要实现的目标。但是
2010-02-27
无法关联到
10:00
,因为它的timeid是
5
,即
11:00
。您的示例还缺少bookslot表中的status列,尽管您在WHERE子句中使用它。这可能与此有关吗?
SELECT b_ref, MIN(ADDTIME(date, times)) AS complete_datetime
FROM bookslot
LEFT JOIN timeslot ON bookslot.id_timeslot = timeslot.id_timeslot
WHERE bookslot.status = 1
GROUP BY bookslot.b_ref
ORDER BY bookslot.date, bookslot.id_timeslot
SELECT b.id, b.id_timeslot, b.date, MIN(`date`) , t.times
FROM bookslot b
LEFT JOIN timeslot t ON b.id_timeslot = t.id_timeslot
GROUP BY b.b_ref