[英]MySQL sub-query issue
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 date(mysql datetime)DESC,ID DESC。
从这4个中选择,按likes(mysql INT)DESC排序
运行查询时,它返回错误的结果。 它选择符合此条件的条目WHERE topic='$id' AND active='1'
。 它按喜欢的DESC排序条目,但忽略此条件ORDER BY date DESC, id DESC
,因此它首先显示ID较小的结果。
可能是什么原因? 先感谢您
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
最外面的查询上的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查询中的其他内容看起来都很正确,以便在嵌入式视图中获取四个“最新”行。)
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.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.