当前位置: 首页 > 知识库问答 >
问题:

MySQL子查询问题

丌官盛
2023-03-14
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

我有这个问题。我希望它从内容表中选择4个条目,并按如下方式对条目进行排序:

>

  • 选择最近的条目。它表示按日期排序(mysql datetime)DESC,id DESC。

    从这4个选定项中,按likes(mysql INT)DESC排序

    运行查询时,它返回错误的结果。它选择与此条件匹配的条目,其中主题='id'和活动='1'。它按likes DESC对条目进行排序,但忽略了这个条件,即按日期DESC、id DESC排序,因此它首先以较小的id显示结果。

    原因是什么?提前谢谢你

  • 共有3个答案

    苏凯
    2023-03-14
    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.
    
    况胡媚
    2023-03-14

    最外层查询中的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”表中的一列,而不是从其他表派生的结果。我们看不到您的查询返回了哪些列,因为您使用的是选择列表。)

    (如果这不是OP正在寻找的,OP可以详细说明指定结果集的要求。在OP查询中,其他一切看起来都很好,用于获取内联视图中的四个“最新”行。)

    巴学潞
    2023-03-14

    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
    
     类似资料:
    • 前面我们介绍了如何使用 SELECT、INSERT、UPDATE 和 DELETE 语句对 MySQL 进行简单访问和操作。下面在此基础上开始学习子查询。 子查询是 MySQL 中比较常用的查询方法,通过子查询可以实现多表查询。 子查询指将一个查询语句嵌套在另一个查询语句中。子查询可以在 SELECT、UPDATE 和 DELETE 语句中使用,而且可以进行多层嵌套。在实际开发时,子查询经常出现在

    • 问题内容: 如标题所述,我想要一个解决方法… 干杯 问题答案: 您可能会希望将an添加到嵌套查询中。

    • 问题内容: 谁能看到以下查询出了什么问题? 当我运行它时,我得到: #1064-您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第8行的’a where a.CompetitionID = Competition.CompetitionID’附近使用 问题答案: 主要问题是内部查询不能与外部语句上的子句相关,因为在内部子查询执行之前,where过滤器首先应用于要

    • 问题内容: 这可能是一个简单的…如何通过此查询实现我想要的结果: 因此,简而言之,我想删除所有最新的15条信息。 当我尝试该查询时,我得到了 MySQL尚不支持’LIMIT&IN / ALL / ANY / SOME子查询 编辑 错误:#1235-此版本的MySQL尚不支持“ LIMIT&IN / ALL / ANY / SOME子查询” 问题答案: 尝试这个:

    • 问题内容: 我有这个Mysql查询,它的工作原理: 结果是: 它可以正确执行,但仅当我将所需的ID硬编码到查询中时(37)。我希望它适用于m3allem表中的所有条目,因此我尝试这样做: 我得到一个错误: “ where子句”中的未知列“ m.id” 为什么?从MySql手册中: 所以…当子查询在SELECT部分​​中时,这不起作用吗?我什么都没读。 有人知道吗?我该怎么办?我花了很长时间来构建此

    • 问题内容: 我很好奇为何应该比更快地执行。 当比尔·卡尔文提出一个要点时,我正在回答一个问题。当您使用它时,它使用相关子查询(依赖子查询),而IN()仅使用子查询。 解释显示,并且两者都使用了一个依赖子查询,并且都只使用了一个子查询..所以我很好奇关联子查询如何比子查询更快? 我以前使用过EXISTS,它的执行速度比IN快,这就是我感到困惑的原因。 这是带有说明的SQLFIDDLE 一些问题 在上