尝试在MYSQL中使用IF和MAX来获取2个表之间的最新日期

时间:2011-12-15 19:02:14

标签: php mysql sql

我有两个表(MySQL),一个包含类别列表,另一个包含可以分配到类别的产品列表。我需要在两个表中提取最近更改的日期,以便我可以根据需要重置此页面的缓存。

我似乎很难在CASE中使用MAX(),目前我有这个有效,但产品日期只是输入数据库的最新产品,不一定是最新产品。

SELECT c.pageid as caturl, p.updated as pup, c.updated as dup,

CASE WHEN p.updated > c.updated THEN p.updated ELSE c.updated END AS latest

FROM products p, categories c 

WHERE p.catid = c.id AND c.hide=0

GROUP BY c.title

当我尝试在CASE中使用MAX()时,它会抛出错误,就像使用IF时一样。

感谢您的帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

好的,我正在尝试这两个派生表。

一,计算类别表中每个类别的MostRecent更新日期:“catdates”(并返回pageid)

The Other,计算产品表中每个类别的给定类别中所有产品的MostRecent更新日期:“proddates”

然后我们加入categoryid并取得更高的价值。

SELECT c.pageid,
GREATEST(proddate.LastModified,catdates.LastModified) AS LastModified
from
(SELECT p.catid as catid,MAX(p.updated) AS LastModified
FROM products p
GROUP BY p.id,p.catid) proddates
INNER JOIN 
(SELECT c.id AS catid,c.pageid,MAX(c.updated) AS LastModified
FROM categories c
WHERE c.hide=0
GROUP BY c.id,c.pageid) catdates
ON proddates.catid=catdates.catid

答案 1 :(得分:0)

如果您只想要最新的行,例如:

SELECT   
  c.pageid as caturl
  , p.updated as pup
  , c.updated as dup
  ,GREATEST(p.updated,c.updated) AS latest
FROM products p
INNER JOIN categories c ON (p.catid = c.id)
WHERE c.hide=0
GROUP BY caturl
HAVING lastest = MAX(lastest)

greatest功能无需case when,但不会更改查询。
真正的变化在having子句中,它只选择最新的行。