SELECT *
FROM (SELECT *
FROM content
WHERE topic='$id' AND active='1'
ORDER BY date DESC, id DESC
LIMIT 4) a
ORDER BY a.likes DESC
我有这个查询。我希望它从content
表中选择4个条目,并按如下方式对条目进行排序:
选择最近的条目。它表示ORDER BY日期(mysql datetime)DESC,id DESC。
从选择的4个中,按喜欢(mysql INT)DESC
运行我的查询时,它返回错误的结果。它会选择符合此条件的条目WHERE topic='$id' AND active='1'
。它按喜欢的DESC对条目进行排序,但忽略了这个标准ORDER BY date DESC, id DESC
,因此它首先显示了ID较小的结果。
可能是什么原因?提前谢谢
答案 0 :(得分:3)
OP编辑后,正确的查询将是
SELECT *
FROM (SELECT *
FROM content
WHERE topic='$id' AND active='1'
ORDER BY date DESC, id DESC
LIMIT 4) a
ORDER BY a.likes DESC, date DESC, id DESC
答案 1 :(得分:3)
最外层查询的ORDER BY
指定返回行的顺序。没有保证或暗示其他行的顺序。
从原始问题(编辑之前)听起来像OP想要按likes
列的整数值降序返回的行。也就是说,OP希望指定:
ORDER BY a.likes DESC
在最外面的查询。
查询返回的行将以最外层查询的ORDER BY
定义的顺序返回。没有其他行的排序保证。
如果OP想要按特定顺序返回的行,则需要以不同方式指定最外层查询的ORDER BY
子句中的表达式列表。例如:
ORDER BY a.likes DESC, a.date DESC, a.id DESC
- 或 -
ORDER BY a.date DESC, a.likes DESC, a.id DESC
内联视图查询将遵循内联视图中的ORDER BY
;但是一旦内联视图查询具体化,并被外部查询引用为行源,那ORDER BY就消失了。外部查询可以按任意顺序自由访问并从内联视图(派生表)返回行;外部查询不需要在内联视图查询中遵守ORDER BY;外部查询只是将派生表看作行集,就像任何其他表一样。
(这假设“likes
”是content
表中的一列,而不是从其他表中派生的结果。我们看不到您的查询返回哪些列,因为您使用*
作为SELECT列表。)
(如果这不是OP正在寻找的,OP可以详细说明指定结果集的要求。在OP查询中,其他所有内容都是正确的,用于获取内联视图中的四个“最新”行。)
答案 2 :(得分:0)
Try this:
SELECT *
FROM content
WHERE topic='$id' AND active='1'
ORDER BY date DESC, likes desc
LIMIT 4
You dont need another level of select to do order by.