选择*,max(日期)在phpMyAdmin中工作,但不在我的代码中

时间:2010-05-08 11:23:26

标签: php sql select phpmyadmin max

好的,我的语句在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;

我想提取最新的群组列表,例如如果一个组已被更改,我希望只有最后一个更改。我需要它作为一个列表(所有组)。

2 个答案:

答案 0 :(得分:1)

您的查询可能已损坏。除非满足以下两个条件之一,否则不应选择不在组中的字段:

  • 您使用聚合函数。
  • 该值在功能上取决于按列分组。

两个字段group_namelimit似乎违反了这些规则。这意味着您将获得这些列的不确定结果。

如果您尝试选择每组最大值,那么您应该使用稍微不同的技术。有关您可以使用的各种方法,请参阅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']);
 }

希望有所帮助