【问题标题】:mysql find the most recent of each idmysql查找每个id的最新的
【发布时间】:2016-08-22 02:12:12
【问题描述】:

我的第一篇文章...

我有一个新闻故事表,用户在其中标记故事,优先级为 1、2、3、4,以便在网站主页上显示。

问题在于,当他们添加故事时,旧的故事会被推到 CMS 中的第二页、第三页等。然后他们标记一个新的“1”、“2”等,而不清除旧的 1、2 等——它们保留在数据中,以防新的数字 1 被“降级”(标记被删除)或被删除。

我想要输出的是每个数字“1”、“2”、“3”和“4”中最新的新闻和标题。

我发现了一些类似的帖子,但重要的不是时间戳,而是标志字段(称为“xorder”)。 “newsStories”表中的相关字段如下:

newsid      int
headline    varchar(60)
xorder      int (number or null)
xtimestamp  datetime - this is the publish date

在这种情况下,xtimestamp 字段很重要,因为它是他们希望新闻故事出现的日期/时间(发布日期),而不是时间戳字段,后者将由 MySQL 更新。我们不想显示发布日期/时间大于当前系统时间戳的故事(允许禁止故事)我们在网页加载时生成查询,因此我们的标准如下所示:

where xorder IS NOT NULL
AND xorder > 0
AND xtimestamp <= 201604271800 (for 6pm today)

(由于还有其他标准,因此略有简化)。

我按 xtimestamp desc 和 xorder asc 排序,只找到了前 4 条记录,但这并没有以正确的 xorder 给它们。

希望这是有道理的,任何帮助表示赞赏。

【问题讨论】:

  • 所以您想从 1 到 4 订购 xorder?只需添加 ORDER BY xorder ASC
  • 按 xorder ASC 订购让我得到所有的 1,然后得到所有的 2。我想要最近的 1,然后是最近的 2,然后是最近的 3,然后是最近的 4。“最近”是指 xtimestamp 字段。

标签: mysql


【解决方案1】:

查看 SQL 文档中 select 章节中的关键字 order bylimit

【讨论】:

    【解决方案2】:

    答案是将所有语句联合起来。对我来说,这是 4 个单独的选择语句,每个语句都有一个限制 1 和它们之间的联合。它确实有效,但似乎有点笨拙。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2020-07-29
      相关资源
      最近更新 更多