7

我有一个相当复杂的查询,它从三个表中获取数据,现在我希望它更复杂(天哪)!

我希望最后发布的功能显示在它自己的页面部分,通过选择表格中的最后一个条目,这很容易。但是,对于复杂的查询(网站的主页),我希望能够不显示此功能。

我想union对我以前的查询进行以下查询,但它没有返回正确的结果:

SELECT
    features.featureTitle AS title, 
    features.featureSummary AS body, 
    features.postedOn AS dummy, 
    DATE_FORMAT( features.postedOn,  '%M %d, %Y' ) AS posted, 
    NULL, 
    NULL, 
    staff.staffName, 
    features.featureID 
FROM 
    features 
    LEFT JOIN staff ON 
        features.staffID = staff.staffID 
WHERE features.postedOn != MAX(features.postedOn)
ORDER BY dummy DESC LIMIT 0,15

此查询返回以下错误:

MySQL 错误:#1111 - 组函数的使用无效

有没有办法解决?

4

2 回答 2

6

max查询需要在它自己的子查询中,所以你的最终 SQL 应该是::

SELECT features.featureTitle AS title,
    features.featureSummary AS body, 
    features.postedOn AS dummy,
    DATE_FORMAT( features.postedOn,  '%M %d, %Y' ) AS posted,
    NULL,
    NULL,
    staff.staffName,
    features.featureID 
FROM 
    features 
    LEFT JOIN staff ON 
        features.staffID = staff.staffID
WHERE
   features.postedOn != (select max(features.postedOn) from features)
于 2009-07-25T19:19:02.213 回答
0

您遇到的问题是您需要在遍历每一行时从表中找到最大(最新)特征,但 MAX() 是一个组函数 - 您必须对所有行进行分组才能使用它。

您可以使用子选择来获取最后一个功能的 id:

WHERE featureId <> (SELECT featureId From features ORDER BY postedOn DESC LIMIT1)

这种方法存在一个问题 - 为每一行运行子选择,但它并不昂贵。

于 2009-07-25T19:35:18.733 回答