【问题标题】:MySQL SELECT COUNT() and then ORDER BY dateMySQL SELECT COUNT() 然后按日期排序
【发布时间】:2011-12-25 21:44:07
【问题描述】:

我到处搜索,但似乎无法正确表达我的问题以获得我想要的结果(我相信这真的很容易,但我一直在打我的头反对它很久了!)

我有以下疑问:

SELECT co.title, co.content, co.id, bu.backupDate, bu.backupBy, COUNT(bu.id) AS totalBackups
FROM content co, wol_content_backup bu
WHERE co.car_model = '6-110'
AND co.subcategory = 'introduction'
ORDER BY bu.backupDate DESC

content 包含文章的内容,wol_content_backup 包含文章的备份。 bu.backupDate 是一个包含备份日期的 DATETIME 字段。

我想要的是返回上次备份的日期(bu.backupDate)(通常有几个,因为我的大多数管理员都训练有素,在修改文章之前按下“备份”按钮!)数据库中的备份数(COUNT(bu.id) AS totalBackups)

但是,我的查询目前只返回一个结果,即第一个备份(不是最新的)我想要的只是从内容中选择具有最新对应备份日期的行。没有 COUNT(bu.id) 查询工作正常,所以我猜这是问题所在,但不知道如何解决它......

任何帮助将不胜感激!

圣诞快乐!

编辑

感谢大家的帮助!我尝试了你所有的建议(一路上学到了很多新东西!)

你们都通过提醒我 MAX() 函数让我走上了正轨,最终导致了以下函数查询:

SELECT co.title, co.content, co.id, MAX(bu.backupDate) AS backupDate, bu.backupBy, COUNT(bu.id) AS totalBackups
FROM content co, wol_content_backup bu
WHERE co.car_model = '6-110'
AND co.subcategory = 'introduction'

它输出的正是我想要的!

非常感谢您在圣诞节帮助一位陷入困境的程序员! :)

Seb

【问题讨论】:

  • 每张表都有哪些id字段?是 co.id = bu.id 还是 bu 中有另一个 id 字段指示特定备份的内容 id?
  • co.id = bu.articleID(有bu.id但只是索引,与co.id无关)
  • coralated 子查询和 max 应该可以解决问题。或带有 max 的子查询(但它会更慢)This 给你一个想法。接受的答案使用较慢的方法,有一个显示相关子查询的第二个示例。

标签: mysql select count


【解决方案1】:

我无法根据我的想法为您提供语法,但请考虑使用子查询来获取最近的备份日期并将其添加到主查询的 WHERE 子句中。然后你可以松开 ORDER 子句,因为你会得到一个结果(并且也会松开 COUNT)。

【讨论】:

    【解决方案2】:

    这应该给你想要的。关键是做一个派生表,让您获得您正在处理的 articleid(s) 的最新备份。然后在外部查询中使用该信息来获取您的标题、内容和备份日期:(以非代码形式散布的 cmets)

    SELECT co.title, co.content, co.id, 
    bu.backupBy,
    mostrecent.MostRecentBackup,  
    mostrecent.NumOfBackups
    FROM content co inner join
    

    这是一个派生表,负责获取上次备份和包含它的记录的 ID

    (select bu.id
           max(bu.backupdate) as MostRecentBackUP,
           count(bu.id) as NumOfBackups
    from 
    wol_content_backup bu
    Group by bu.id
    ) mostrecent
    

    然后你进入带有articleid的内容表

    on co.id = mostrecent.articleid
    

    然后返回到 wol_content_backup 表的 backupBy 字段

    inner join wol_content_backup buouter on
    mostrecent.id = buouter.id
    
    WHERE co.car_model = '6-110'
    AND co.subcategory = 'introduction'
    ORDER BY MostRecentBackup DESC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      相关资源
      最近更新 更多