好的,我的语句在phpMyAdmin中运行良好,但不是我在php页面中的预期。
这是我的陈述:
SELECT `egid`, `group_name` , `limit`, MAX( `date` )
FROM employee_groups
GROUP BY `egid`
ORDER BY `egid` DESC ;
这可能是表格:
CREATE TABLE `employee_groups` (
`egid` int(10) unsigned NOT NULL,
`date` date NOT NULL,
`group_name` varchar(50) NOT NULL,
`limit` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`egid`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
我想提取最新的群组列表,例如如果一个组已被更改,我希望只有最后一个更改。我需要它作为一个列表(所有组)。
答案 0 :(得分:1)
您的查询可能已损坏。除非满足以下两个条件之一,否则不应选择不在组中的字段:
两个字段group_name
和limit
似乎违反了这些规则。这意味着您将获得这些列的不确定结果。
如果您尝试选择每组最大值,那么您应该使用稍微不同的技术。有关您可以使用的各种方法,请参阅Quassnoi的文章MYSQL: Selecting records holding a groupwise maximum。
这是一种方法:
SELECT di.*
FROM (
SELECT egid, MAX(date) AS date
FROM employee_groups d
GROUP BY egid
) dd
JOIN employee_groups di
ON di.egid = dd.egid AND di.date = dd.date
答案 1 :(得分:0)
聚合函数将在mysql中工作,与sql标准不同。要从php访问max(date)
的值,您必须使用别名:
SELECT `egid`, `group_name` , `limit`, MAX( `date` ) as maxdate
FROM …
然后您可以像使用
的php中的任何其他列一样选择它 while($row = mysqli_fetch_row($result)) {
echo htmlspecialchars($row['maxdate']);
}
希望有所帮助