从select中了解较低的值及其列名

时间:2014-02-25 12:47:31

标签: php sql select

我有一个带有MySQL数据库的PHP文档,其存储结构如下:

  • DATE FIELD
  • 对应于24小时的24 float个值。 (名称为1h,2h,3h,4h ...... 24h)

我使用简单的选择获取一行:SELECT * from table where DATE = "2014-02-02"获取25个字段。

我想知道1h,2h,3h ......的场数值较低。我正在尝试使用PHP和min()函数,但我只检索值,而不是数组的索引。

这可能是了解此结果的简单方法吗?也许在SQL函数中?

谢谢

编辑:我试过这个(考虑到$ arraySQL之前获得了有效的结果):

     function ObtainArrayFromSQL($arraySQL){
     $array = array();
     for ($i = 1; $i < 25; $i++)
          {
              array_push($array, $data_day[$i."h"]);
          }
     return $array;
     }
     [...]

     $array = ObtainArrayFromSQL($arraySQL)
     echo min($array);

2 个答案:

答案 0 :(得分:3)

假设您使用的是MySQL,则可以使用least()函数:

select t.*,
       (case when col1 = leastval then 'col1'
             when col2 = leastval then 'col2'
             when col3 = leastval then 'col3'
             . . .
             when col24 = leastval then 'col24'
        end) as leastvalcol   
from (select t.*,
             least(col1, col2, . . . , col24) as leastval
      from table t
     ) t;

在抱怨你需要的所有打字之前,你应该知道这个查询比它需要的要复杂得多 - 因为你把东西存放在应该在列中的行上。对于每个每小时值,您的表应该有一个单独的行,而不是将所有每日值放在一行上。使用更标准化的结构,您的查询将更加简单。

编辑:

此表格包含以下列:

Date date,
Hour time,  -- or int or varchar() depending on how you really want it captured
Value float

然后查询可能如下所示:

select date, min(value) as minvalue,
       substring_index(group_concat(hour order by value asc), ',', 1) as minhour
from newtable t
group by date;

答案 1 :(得分:0)

首先,谢谢大家的帮助。

最后,我用PHP制作了解决方案,而不是操纵一个大的SQL句子。

我使用函数ObtainArrayFromSQL创建数组,然后在haystack(数组)中使用函数array_search()和min()作为指针。

 function ObtainArrayFromSQL($arraySQL){
 $array = array();
 for ($i = 1; $i < 25; $i++)
      {
          array_push($array, $data_day[$i."h"]);
      }
 return $array;
 }
 ...

$index_lower_value =  array_search(min($array), $array);

谢谢大家!