Php 从select中了解下限值及其列名

Php 从select中了解下限值及其列名,php,sql,select,Php,Sql,Select,我有一个带有MySQL数据库的PHP文档,其存储结构如下: 日期字段 24float对应于24小时的值。(名称为1h、2h、3h、4h…24h) 我使用简单的select:select*从表中获取一行,其中DATE=“2014-02-02”获取25个字段 我想知道1h,2h,3h的哪个场。。。。具有较低的值。我尝试使用PHP和min()函数来实现这一点,但我只检索值,而不是数组的索引 这可能是一个简单的方法来了解这个结果吗?可能在SQL函数中 多谢各位 编辑:我尝试了这一点(考虑到$arra

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

  • 日期
    字段
  • 24
    float
    对应于24小时的值。(名称为1h、2h、3h、4h…24h)
我使用简单的select:
select*从表中获取一行,其中DATE=“2014-02-02”
获取25个字段

我想知道1h,2h,3h的哪个场。。。。具有较低的值。我尝试使用PHP和min()函数来实现这一点,但我只检索值,而不是数组的索引

这可能是一个简单的方法来了解这个结果吗?可能在SQL函数中

多谢各位

编辑:我尝试了这一点(考虑到$arraySQL以前获得的结果是有效的):

函数获取ArrayFromSQL($arraySQL){
$array=array();
对于($i=1;$i<25;$i++)
{
数组推送($array,$data_day[$i.“h”]);
}
返回$array;
}
[...]
$array=ActainArrayFromSQL($arraySQL)
回波最小值($阵列);

假设您使用的是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;

假设您使用的是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;

假设您使用的是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;

假设您使用的是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;

首先,感谢大家的帮助

最后,我用PHP解决了这个问题,而不是操纵一个大的SQL语句

我使用函数actainArrayFromSQL创建数组,然后使用函数array_search()和min()作为大海捞针(数组)

函数获取ArrayFromSQL($arraySQL){
$array=array();
对于($i=1;$i<25;$i++)
{
数组推送($array,$data_day[$i.“h”]);
}
返回$array;
}
...
$index\u lower\u value=数组搜索(最小($array),$array);

谢谢大家

首先,感谢大家的帮助

最后,我用PHP解决了这个问题,而不是操纵一个大的SQL语句

我使用函数actainArrayFromSQL创建数组,然后使用函数array_search()和min()作为大海捞针(数组)

函数获取ArrayFromSQL($arraySQL){
$array=array();
对于($i=1;$i<25;$i++)
{
数组推送($array,$data_day[$i.“h”]);
}
返回$array;
}
...
$index\u lower\u value=数组搜索(最小($array),$array);

谢谢大家

首先,感谢大家的帮助

最后,我用PHP解决了这个问题,而不是操纵一个大的SQL语句

我使用函数actainArrayFromSQL创建数组,然后使用函数array_search()和min()作为大海捞针(数组)

函数获取ArrayFromSQL($arraySQL){
$array=array();
对于($i=1;$i<25;$i++)
{
数组推送($array,$data_day[$i.“h”]);
}
返回$array;
}
...
$index\u lower\u value=数组搜索(最小($array),$array);

谢谢大家

首先,感谢大家的帮助

最后,我用PHP解决了这个问题,而不是操纵一个大的SQL语句

我使用函数actainArrayFromSQL创建数组,然后使用函数array_search()和min()作为大海捞针(数组)

函数获取ArrayFromSQL($arraySQL){
$array=array();
对于($i=1;$i<25;$i++)
{
数组推送($array,$data_day[$i.“h”]);
}
返回$array;
}
...
$index\u lower\u value=数组搜索(最小($array),$array);

谢谢大家

您使用的是什么数据库?很高兴看到您已经尝试了什么。MySQL,使用MySQLi函数,我在SQL中编辑答案
MIN()
函数-tryit@Alexander他已经写了他试过了你在用什么数据库?很高兴看到你已经试过了。MySQL,使用MySQLi函数,我编辑答案
MIN()
SQL中的函数-请尝试it@Alexa