MySQL SELECT COUNT()然后是ORDER BY日期

时间:2011-12-25 21:44:07

标签: mysql select count

我到处都搜索过,但似乎无法找到正确的方法来表达我的问题以获得我想要的结果(我确信这很容易,但我一直在打我的脑袋反对它多年!)

我有以下查询:

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

内容包含文章的内容,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

2 个答案:

答案 0 :(得分:0)

我无法提供关于我的头类型的语法,但考虑一个子查询来获取最新的备份日期并将其添加到主查询的WHERE子句中。然后你可以松开ORDER子句,因为你会得到一个结果(并且还会丢失COUNT)。

答案 1 :(得分:0)

这应该给你想要的。关键是要创建一个派生表,它可以为您处理的文章提供最新的备份。然后在外部查询中使用该信息来获取您的标题,内容和备份日期:(评论散布为非代码)

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