【问题标题】:How to select from a selection?如何从选择中进行选择?
【发布时间】:2014-01-23 08:19:11
【问题描述】:

我正在创建一个评论系统,它将有 2 个顶级 cmets。

如何选择最新的 20 行,然后从该选择中选择前 2 行(喜欢-不喜欢)?我可以使用 PHP 循环来完成,但效率不高。目前我只是从所有 cmets 中选择前 2 名,但前两名 cmets 永远不会改变,因为人们只是对这些 cmets 投票:

SELECT * FROM pagecomments WHERE page_id='$pageid' ORDER BY likes-dislikes DESC LIMIT 2

编辑:该表按列“id”排序,即 auto_increment。 page_id 是网站上的页面。对不起。

【问题讨论】:

  • 您的 pagecmets 表中有哪些列?您是否有一个 auto_increment 字段或时间戳来决定最新的 20 行?
  • 很难理解你想要做什么 - 给我们一张表格并澄清你的陈述
  • 表格按“id”列排序,即auto_increment。 page_id 是网站上的页面。

标签: mysql sql


【解决方案1】:

嵌套您的查询:

SELECT   *
FROM (
  SELECT   *
  FROM     pagecomments
  WHERE    page_id='$pageid'
  ORDER BY date DESC
  LIMIT    20
) t
ORDER BY likes-dislikes DESC
LIMIT    2

【讨论】:

    【解决方案2】:

    不仅按赞排序,还按输入的日期或时间戳排序。通过按日期排序,您确保您将获得最新的 20 个帖子或 cmets。

    SELECT * FROM pagecomments WHERE page_id='$pageid' ORDER by date_entered desc , 
    likes-dislikes DESC limit 2
    

    【讨论】:

    • 这只会选择最近的 2 个 cmets,不管他们的好恶。
    • 选择最新输入的20行后,查询是按喜欢-不喜欢排序,确实有两个排序条件,先按日期,再按喜欢-不喜欢。
    【解决方案3】:

    由于您的id 列设置为auto_increment,因此在子查询中使用它:

    select *, likes-dislikes
    from (
      select *
      from pagecomments
      where page_id='$pageid'
      order by id desc
      limit 20
      ) t
    order by likes-dislikes desc
    limit 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多