2016-07-27 62 views
0

我有一個表設置了5列:MySQL的min()和MAX()的查詢陣列呼應零

USER_ID,5K,10K,半程馬拉松,和馬拉松。

我想在每個運行距離的用戶頁面上顯示用戶的最佳時間。用戶將能夠更新任何創建新行的時間,其餘列設置爲空。因此,例如,

行1:

USER_ID:5,5K:空,10K:45:00,一半:空,馬拉松:空。

然後用戶運行其他10K,並得到一個更好的時間,再加上要更新自己的5K時間:

行2則是:

USER_ID:5,5K:15:53 ,10k:40:40,一半: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()(我存儲在幾秒鐘時間):

對象(stdClass的) #18(4){[「MIN(5k)」] => string(3)「953」[「MIN(10k)」] => string(4)「2440」[「MIN(halfmarathon)」] => string(1)「0」[「MIN(marathon)」] => string(1)「0」}

但是,當我試圖回顯這個,所以$user_benchmarks->5k它不顯示任何東西,當我運行print_r($user_benchmarks->5k)它回來作爲NULL

有沒有人遇到這個/知道發生了什麼?我也嘗試在打印之前將字符串轉換爲整數 - 無效 - 仍然得到NULL

+0

屬性'5k',不應該是'MIN(5k)'? – frz3993

+1

規範你的模式。數據庫表不是電子表格! – Strawberry

+0

有沒有什麼理由爲什麼你的表不像'user_id','race_type','time'?這可能會爲您節省大量空值,並使查詢更加直觀。你的問題也會變得更容易回答。 – apokryfos

回答

-1

使用

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

非常感謝你! –

+0

@Down voter:你能解釋爲什麼這不被接受嗎? – Tamil

+0

林不知道。但也許你因爲你沒有解釋什麼是問題,也不知道你是否可以命名變量'5k'你可能需要使用反引號'''5k'' –

0

的var_dump已經表現出你到底是什麼鍵的使用方法:

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

那你爲什麼使用

$user_benchmarks->5k 
       ^^^ 

0

這是因爲$ user_benchmarks對象的 「5K」 屬性不存在。您需要改爲訪問「MIN(5k)」屬性。因此,例如:

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

在另一方面,你可以查詢更改爲類似這樣:

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

然後,你將能夠訪問屬性「5K」和「10K」就像你通緝。

+1

是的!謝謝!其他人先回應,所以我給了他答案,但是很棒,由於某種原因與[MIN(5k)]相呼應]不工作埠我希望它像上面那樣乾淨。謝謝! –

+0

@HhWhiskey我很高興我能幫上忙。我編輯了我的答案並修正了第一個「echo」示例,因此它現在應該可以工作。 –