mySQL min()和max()查询数组回显为零

时间:2016-07-27 14:30:55

标签: php mysql sql arrays sql-server

我有一个包含5列的表格:

  

user_id,5k,10k,halfmarathon和marathon。

我希望在每个运行距离的用户页面上显示用户的最佳时间。用户将能够更新创建新行的任何时间,其余列将设置为null。例如,

第1行是:

  

user_id:5,5k:null,10k:45:00,half:null,marathon:null。

然后用户再运行10k并获得更好的时间,并且想要更新他们的5k时间:

第2行是:

  

user_id:5,5k:15:53,10k:40:40,half:null,marathon:null。

当我运行以下SQL查询时

$query = "SELECT MIN(5k), MIN(10k), MIN(halfmartahon), MIN(marathon)
        FROM Times
        WHERE user_id = ".$userID."
        GROUP BY user_id";
$db->query($query);
//Assign Result Set
$user_benchmarks = $db->single();`

当我vardump()(我以秒为单位存储时间)时,我得到一个正确的数组:

  

object(stdClass)#18(4){[" MIN(5k)"] => string(3)" 953" [" MIN(10K)"] => string(4)" 2440" [" MIN(半程马拉松)"] => string(1)" 0" [" MIN(马拉松)"] => string(1)" 0" }

然而,当我尝试回应这一点时,$user_benchmarks->5k它没有显示任何内容,当我运行print_r($user_benchmarks->5k)时,它会以NULL的形式返回。

有没有人遇到过这个/知道发生了什么?我还尝试将字符串转换为整数,然后将其打印无效 - 仍然得到NULL

3 个答案:

答案 0 :(得分:0)

var_dump已经准确地显示了要使用的密钥:

object(stdClass)#18 (4) { ["MIN(5k)"]=> string(3) "953"
                            ^^^^^^^

那你为什么要用

$user_benchmarks->5k
                 ^^^

答案 1 :(得分:0)

这是因为" 5k" $ user_benchmarks对象的属性不存在。你需要访问" MIN(5k)"财产而不是。例如:

echo $user_benchmarks->{"MIN(5k)"};

另一方面,您可以将查询更改为以下内容:

SELECT MIN(5k) AS `5k`, MIN(10k) AS `10k` ...

然后您就可以访问属性" 5k"和" 10k"就像你想要的那样。

答案 2 :(得分:-1)

使用

SELECT MIN(5k) as 5k, 
       MIN(10k) as 10k, 
       MIN(halfmartahon) as halfmartahon, 
       MIN(marathon) as marathon