我有这个相当复杂的查询,从三个表中获取数据,现在我希望它更复杂(哦,亲爱的)!
我希望最后发布的功能显示在页面的自己的部分中,通过选择表格中的最后一个条目,这很容易。但是,对于复杂的查询(网站的主页),我希望不能显示此功能。
我想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 - 无效使用群组功能
有什么方法吗?
答案 0 :(得分: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)
答案 1 :(得分:0)
你遇到的问题是你需要从表中找到最大(最新)功能,同时遍历每一行,但MAX()是一个组功能 - 你必须将所有行分组才能使用它。
您可以使用子选择来获取最后一个要素的ID:
WHERE featureId <> (SELECT featureId From features ORDER BY postedOn DESC LIMIT1)
这种方法存在问题 - 每行都会运行子选择,但这并不贵。