2016-12-06 9 views
-2

は、私は3つのテーブルを持っています。 すべての人が0,1、または複数のインタレストを持つことができます。PHP JSONエンコード多次元SQL応答

PersonごとにすべてのInterestsを取得し、PHPでjsonにエンコードする方法はわかりません。

私はまた、PersonIDによって自分のSQLデータベースからPrepared Statementsを取得したいと考えています。

これを解決する方法を教えてもらえますか?

私の問題は、json_encodeが1人あたりの利益を印刷しないということです。

ありがとうございました

+3

コードを追加して、実際の出力と希望の出力をお願いしますか? – JazZ

+0

問題は、私はSQLの結果から複数の行を取得することです。しかし、私はjsonの結果でPersonごとに1つの行が必要です。すべての人は、興味を持っている追加の配列やオブジェクトを含めるべきです – XXXMysteriXXX

+2

しかし、ここで誰もあなたが最初に試したことがなく、正確にあなたが詰まっている場所を見ずにこのコードを書くでしょう。 – JazZ

答えて

-1

sql by PersonIDを注文してください。行をフェッチした後、次のような行があると考えてください。

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']; 
    } 
} 

これは簡単な例です。最終的なArrayの外観をどのようにしたいかによって異なります。

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は、そのクエリの結果ですが、あなたは$result、アレイ構築するforeachループを使用することができるはずです

$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)