2016-12-06 67 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)