2014-09-19 22 views
0

我可能會這樣做都是錯誤的,但我真的需要幫助,以瞭解如何通過嵌套數組工作。我有兩個用戶和評論表。用LEFT JOIN TABLE提取結果的嵌套數組

這是我使用的SELECT語句:

SELECT * 
FROM `users` 
LEFT JOIN `reviews` 
ON users.userId = reviews.user_id 
WHERE installation_id = $installation_id 

這是我收到我的數組:

Array 
(
    [0] => Array 
     (
      [userId] => 60 
      [usersEmail] => [email protected] 
      [password] => 0Vg+sLdlALchd39l+3K3QXFZlvh79bwqXFp/J3nIR+o= 
      [usersName] => Lauren 
      [role] => scout 
      [id] => 1 
      [user_id] => 60 
      [client_id] => 62 
      [comments] => This person was extremely professional and went above and beyond. Her pricing was reasonable. 
      [stars] => 4 
     ) 

    [1] => Array 
    (
     [userId] => 60 
     [usersEmail] => [email protected] 
     [password] => 0Vg+sLdlALchd39l+3K3QXFZlvh79bwqXFp/J3nIR+o= 
     [usersName] => Lauren Rothlisberger 
     [role] => scout 
     [id] => 2 
     [user_id] => 60 
     [client_id] => 1 
     [comments] => She was pretty good. I have a couple small complaints but overall decent experience. 
     [stars] => 3 
    ) 

[2] => Array 
    (
     [userId] => 63 
     [usersEmail] => [email protected] 
     [password] => 
     [usersName] => Paul Rothlisberger 
     [role] => 
     [id] => 
     [user_id] => 
     [client_id] => 
     [comments] => 
     [stars] => 
    ) 

一下這沒有意義對我來說。我以爲它會更像

[1] => Array 
    (
     [userId] => 60 
     [usersEmail] => [email protected] 
     [password] => 0Vg+sLdlALchd39l+3K3QXFZlvh79bwqXFp/J3nIR+o= 
     [usersName] => Lauren Rothlisberger 
     [role] => scout 
     [id] => 2 
     [user_id] => 60 
     [client_id] => 1 
       Array [0](
         [comments] 
         [stars]) 
    ) 

如何獲得該數組?此外,他們如何遍歷用戶,然後顯示用戶所有評論和明星。

我也無法弄清楚如何找到UserId = 60的星星,然後給出該用戶的平均星星。

感謝您爲我提供的任何幫助。我顯然缺少一些基礎知識。請不要指向我通過它的文檔,並且不能應用它。

+1

只使用MySQL查詢你不能做到這一點,你必須對你的結果之上執行環準備這樣 – Sundar 2014-09-19 12:48:50

+0

更新數組你的代碼試了一下到目前爲止 – Sundar 2014-09-19 12:50:33

+0

許多PHP框架(Laravel,CakePHP的,等等)能夠按照您的期望組織查詢輸出中的表關係,但是SQL本身僅能夠處理2維結果集。如果你在普通的MySQL客戶端執行相同的查詢,你的結果將是嚴格的表格。使用原始PHP,你需要自己編寫代碼。 – 2014-09-19 12:59:35

回答

0

你已經注意到每個返回的記錄是一個完整的記錄,當涉及多對一的關係時,每個組合都會得到一條記錄。

當我遇到這種情況時,我應用以下短循環將結果打包爲更類似於第二種格式的結果,但它包含每次都重複用戶級別字段。這樣,我可以很容易地計算每個用戶的子項數量,通過在輸出端使用嵌套的foreach進行中間排序或其他操作。

$results = array(); 
$results_raw = db.select(' ... the select statement '); 
if (is_array($results_raw)) foreach ($results_raw as $result) { 
    $results[$result['userId']] = $result; 
}