2015-10-16 47 views
-1

我很困惑,我會嘗試解釋而不會讓您感到困惑。無法循環訪問MySQL + PHP中的結果

我在我的查詢中加入了多個表,這些表在SQL中正常工作,正如預期的那樣。 (在這種情況下,表中有兩行'projects_underground'),它們的值是'大象&城堡''Lambert North')。

我需要遍歷$row['underground_name']數組的結果,但對於我的生活,我無法讓它工作或明白我要去哪裏錯了。

我可以遍歷所有行,但是這給了我兩倍的一切,包括'項目'表中的所有內容 - 這看起來效率非常低。因爲我只需要'Projects'表中的第一行。但是如果我通過$row['underground_name']循環播放,我不會從「項目」中獲得任何價值 - 目前感覺它是一種或另一種?

是否有可能循環訪問只有$row['underground_name']數組?

這裏是我的代碼 - 感謝您的幫助,

$query = "SELECT * FROM projects 
LEFT OUTER JOIN projects_underground ON projects.projects_id = projects_underground.projects_FK 
LEFT OUTER JOIN underground ON underground.underground_id = projects_underground.underground_FK 
LEFT OUTER JOIN natrail ON projects.natrail_id = natrail.natrail_id 
LEFT OUTER JOIN dlr ON projects.dlr_id = dlr.dlr_id 
LEFT OUTER JOIN overground ON projects.overground_id = overground.overground_id 
LEFT OUTER JOIN tram ON projects.tram_id = tram.tram_id LEFT JOIN river ON projects.river_id = river.river_id 
WHERE projects.name = 'Imperial War Museum'"; 

$result = mysqli_query($dbc, $query); 
while ($row = mysqli_fetch_assoc($result)) 
    { 
     $r = $row['underground_name']; 

    } 
+2

你可以在MySQL IDE中運行查詢並向我們顯示結果嗎? –

+0

當然 - 屏幕截圖在這裏... http://dev.museums-london.com/Query-Screenshot.png(我已經縮短了查詢不是來自項目的所有內容 - 但爲了簡單起見,只是'名稱') 。 – CallMePhilip

+3

您需要實際發佈結果,而不是提供屏幕截圖。這是整個問題被保留給未來的訪問者。 –

回答

0

$行[「underground_name」]不會被一個PHP陣列出來的數據庫,所以你將不能夠重複超過它。如果它存儲爲json,那麼當你解碼它時,你將有一個數組來處理,並且foreach {}將完成這項工作。如果它是一個更小,更定義的數據集,您可以用一個分隔符存儲,然後將該行結果分解以創建一個真正的數組....但除此之外,您正在處理一個字符串....並且該字符串是平坦的。

下面是一個快速的僞代碼,讓您走上正確的軌道。有時這樣做有助於將所有內容全部展示出來......然後,您可以沿着print_r/var_dump的方式將數據可視化得更好一些。

while ($row = mysqli_fetch_assoc($result)){ 
    $q = $row['fieldQ']; 
    $r = json_decode($row['underground_name']); 
    foreach($r AS $k => $v){ 
     //this is the loop you're looking for 
    } 
    $s = $row['fieldS']; 
    $t = $row['fieldT']; //etc,...etc. 
} 
+0

我的理解是mysqli_fetch_assoc($ result)的結果推出了一個關聯數組? - $ row ['underground_name'] $ row是數組,'['underground_name']是關鍵?你的意思是說,在$ row ['underground_name']上運行一個foreach循環可以做到這一點嗎?非常感謝您的幫助,我知道新手們會問最無聊的問題! – CallMePhilip

+0

是的,這就是它。 $ row是數組本身['undergroundname']是關鍵。所以從db中,$ row ['underground']的名字將會是一個字符串。 但是,如果它不是一個字符串,...如果你已經存儲它與JSON,...然後json_decode該字符串,...那麼你會有你在$行數組中尋找數組。 然後,是的,......在$ row ['underground_name']上運行一個foreach {} – MichaelClark

+0

我用一個快速樣例來更新答案。它確實假定'underground_name'字段中的數據已經可以使用了,正如我所說的,它不一定是json,但是你需要創建一個數組,不管它是什麼,... json將是一個理智的起點。序列化也可以工作,但我不喜歡它,對於'underground_name'中的一個簡單的一維數組,只是使用分隔符和爆炸是最簡單的,而且開銷最小。 – MichaelClark