繁体   English   中英

MySQL子查询问题

[英]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个条目,并对条目进行如下排序:

  1. 选择最新条目。 它表示ORDER BY date(mysql datetime)DESC,ID DESC。

  2. 从这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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM