Php mysql返回GROUP BY query中的最低列值

Php mysql返回GROUP BY query中的最低列值,php,mysql,Php,Mysql,我已经在一个程序中使用这个查询很长时间了,但是它开始给我错误的结果。我希望每个唯一级别返回一个列名,然后返回该级别中的最低z_索引值 SELECT * FROM Conrad WHERE ProductID = '1' GROUP BY level ORDER BY z_index 它通常返回如下内容: ProductID level z_index ============================== 1 One 10 1

我已经在一个程序中使用这个查询很长时间了,但是它开始给我错误的结果。我希望每个唯一级别返回一个列名,然后返回该级别中的最低z_索引值

SELECT * FROM Conrad WHERE ProductID = '1' GROUP BY level ORDER BY z_index
它通常返回如下内容:

ProductID    level    z_index
==============================
   1          One       10
   1          Two       20
   1          Three     30
这是预期的结果。但它现在返回的是:

ProductID    level    z_index
==============================
   1          One       83
   1          Two       224
   1          Three     308
我仍然得到一个每一级,但它现在返回任何z_索引值为该级别找到

SELECT * FROM Conrad WHERE ProductID = '1' GROUP BY level ORDER BY z_index
MySql有什么变化吗?或者我的查询永远都不好

1月21日星期六更新:现在,当我添加更多需要的列名时,查询将返回z_索引的正确值,但file_name和file_loc的值似乎来自级别的第一行,而不是包含正确z_索引值的行

是什么导致了这种情况

SELECT ProductID, level, min(z_index), file_name, file_loc FROM Conrad WHERE ProductID = '1' GROUP BY level ORDER BY z_index

ProductID    level    z_index   file_name   file_loc
====================================================
   1          One       10        wrong.png    ?
   1          Two       20        file.png     ?
   1          Three     30        names.png    ?

对于最小值,您的查询几乎没有错误。尝试以下查询

SELECT ProductID
     , level
     , MIN(z_index) z_index
  FROM Conrad 
 WHERE ProductID = 1
 GROUP 
    BY ProductID
     , level 
 ORDER 
    BY z_index
试试这个:

select
  productid,
  level,
  min(z_index)
from
  Conrad 
WHERE 
  ProductID = '1' 
GROUP BY 
  level 
ORDER BY z_index

你的质询永远是错误的。如果你使用GROUP BY,使用一个聚合函数(),比如min(z_index),它看起来有点像是一个字符串,z_index列是int(4),在这个上下文中(4)是没有意义的。但是reza的查询将返回正确的值-除非您遗漏了一些信息。您能给我看一下。。。这对我来说没有错。原来的海报上没有提到这一点。他回答了这个问题。在这种情况下,您还必须按productid进行分组。我认为这里不需要。哈哈。所以对于这个项目将来可能进行的修改,您说当前的查询是错误的。。。我无法反驳这一逻辑,但仍然感觉到它的严厉判断。这一质疑非常有效。我怀疑我最初的查询很幸运,因为很久以前表的自然顺序是这样的。谢谢@user1601513,这里的数字不同吗?