我有这张桌子(不是实际的,但它是一个例子):
SELECT *
FROM logs
WHERE date BETWEEN '$begin 00:00:00' and '$end 23:59:59'
ORDER BY id desc
我需要一个查询来以更有条理的方式获取值。
这是我目前的查询:
ID| VAL | LOG | DATE
6 2 bla xx/xx/xxxx
5 6 bla xx/xx/xxxx
4 1 bla xx/xx/xxxx
3 3 bla xx/xx/xxxx
2 2 bla xx/xx/xxxx
1 1 bla xx/xx/xxxx
这会返回:
ID| VAL | LOG | DATE
5 6 bla xx/xx/xxxx
3 3 bla xx/xx/xxxx
6 2 bla xx/xx/xxxx
2 2 bla xx/xx/xxxx
4 1 bla xx/xx/xxxx
1 1 bla xx/xx/xxxx
我想让它们按VAL列组织,然后通过id desc排序。 所以它应输出:
SELECT *
FROM logs
WHERE date BETWEEN '$begin 00:00:00' and '$end 23:59:59'
ORDER BY id desc
GROUP BY val
正如您所看到的,VAL列上的项目都在一起。
我该如何归还?
我试过了:
<div>
但是每个VAL项只返回一行。
获得此结果的正确方法是什么?
答案 0 :(得分:1)
试试这个:
SELECT *
FROM logs
WHERE date BETWEEN '$begin 00:00:00' and '$end 23:59:59'
ORDER BY val desc, id desc
答案 1 :(得分:0)
您不需要时间组件进行日期比较。我建议:
SELECT l.*
FROM logs l
WHERE date >= '$begin' and date < date_add('$end', interval 1 day)
ORDER BY val desc, id desc;
如果在$end
的应用程序中添加1天,则查询更简单:
SELECT l.*
FROM logs l
WHERE date >= '$begin' and date < '$end'
ORDER BY val desc, id desc;
您没有在应用层提及您正在使用的内容。通常,最好在SQL语句中使用参数而不是用户定义的字符串。