2016-12-06 42 views
-2

我有三個表: 人 和 利益 和 Persons_InterestsPHP JSON編碼多維SQL響應

有像20和利益的人的hundrets。 每個人可能有0個,1個或多個興趣。

我不知道如何讓每個人都有興趣的所有人,並使用PHP將其編碼爲json。

我也希望通過PersonID從我的sql數據庫中獲得準備好的語句的結果。

誰能告訴我如何解決這個問題?

我的問題是,json_encode不打印每個人的興趣。

謝謝

+3

你可以添加你的代碼,實際的輸出和所需的輸出嗎? – JazZ

+0

問題是我從sql結果中得到多行。但是我希望json結果中每個Person都有一行。並且每個人都應該包含一個額外的數組或對象,這些數組或對象持有興趣 – XXXMysteriXXX

+2

好的,但沒有人會在沒有看到您先嚐試什麼以及您的卡在哪裏的情況下編寫此代碼。 – JazZ

回答

-1

通過PersonID訂購你的sql。在取出行之後,讓我們認爲你得到了如下行:

PersonID | InterestID

  • 1 | 1

  • 1 | 2

  • 1 | 4

  • 2 | 3

  • 2 | 1

  • 2 | 2

  • 3 | 5

對於這個真的簡單的例子,你會走在你的陣列,並在新的重新整理數據陣列

sortedArray= []; 
Foreach(result as row) { 
    If(empty(sortedArray[row['PersonID']])) { 
     sortedArray[row['PersonID']]['Interests'][] = row['InterestID']; 
    } 
} 

這就是一個簡單的例子。這取決於你想如何最終陣列看起來像。

0

如果您的SQL看起來是這樣的:

select p.name, i.name from persons as p 
outer join persons_interests as pi on p.id = pi.person_id 
left join interests as i on pi.interest_id = i.id 

$personsInterests是查詢的結果,你應該能夠使用foreach循環來構建$result陣列

$result = []; 
foreach ($personsInterests as $interest) { 
    if (isset($result[$interest[0]])) { 
     $result[$interest[0]][] = $interest[1]; 
    } else { 
     $result[$interest[0]] = isset($interest[1]) ? [$interest[1]] : []; 
    } 
} 

和那麼json_encode($result)