2015-01-23 3 views
-1

PHP를 통해 MySQL 데이터베이스에서 데이터를 가져 오려고합니다. json을 사용하고 싶습니다. 안드로이드 앱에서 처리하는 것이 좋기 때문입니다.JSON PHP 다차원 배열에 가입

나는 다음과 같은 시도 : 우리는 세 가지 Datatables 있습니다

User: 
-id 
-name 

REF_Interests 
-ref_interests_id 
-interestName 

User_Ref_Interests 
-id 
-userid 
-ref_interests_id 

우리가 "수영"등의 여러 사용자와 관심을 작성 ref_interests_id = 1 (예)

것이 가능 얻을되는 방법 이 같은 이익을 보유하고 배열 각 사용자에 대해 하나의 행 :

User: 
-id 
-name 
-interests: 
    --interest 
    ---ref_interest_id 
    ---interestName 
    --interest 
    ---ref_interest_id 
    ---interestName 
    --... 
    ---... 
    ---... 

내가 한 4 개 행을 반환하는 테이블을 조인 우리 이 사용자는 4 개의 관심사를 가지고 있습니다. 이것은 내가 생각하기에 매우 불편합니다. 내 실제 솔루션보다 나은 방법이 있습니까?

수천 번 감사드립니다!

+0

PHP 함수 json_encode()를 사용하여 배열을 jason으로 인코딩하려고 했습니까? – karmendra

+0

예 Iam 인코딩. 그러나 내 SQL-Query는 사용자가 가지고있는 각각의 관심에 대해 여러 줄을 반환합니다. –

+0

사용자는 여러 줄로 결과 집합을 얻으면 결과 집합에 foreach 루프를 실행하고 배열에 값을 캡처 한 다음 json으로 인코딩합니다. – karmendra

답변

1

불행히도 당신은 하나의 MySQL 쿼리에서 그것을 할 수 없습니다.

  1. 실행이 쿼리 : 사용자가 얻을 이익 (SQL 연산자에서 사용)를 얻을

    나는이 개 솔루션을 제안 할 수 있습니다. 그런 다음이 모든 것을 하나의 배열로 혼합하십시오. 그것은 매우 빠른 해결책이 될 것입니다 (단지 2 개의 쿼리 만 있기 때문에). 그러나 PHP 코드를 작성해야합니다.

  2. 여러 개의 쿼리를 실행하십시오. 모든 사용자를 얻고 각 사용자에 대해 관심을 갖습니다. 느리지 만 코드가 더 간단해질 것입니다. 이 솔루션은 페이지 매김의 경우에 사용할 수 있습니다 (LIMIT < 100).

도움이되기를 바랍니다.

편집 2 :

먼저 두 개의 쿼리 방법.

{ 
    "1": { 
     "id": "1", 
     "name": "u1", 
     "interests": [ 
      { 
       "ref_interest_id": "1", 
       "interestName": "i1" 
      }, 
      { 
       "ref_interest_id": "2", 
       "interestName": "u2" 
      }, 
      { 
       "ref_interest_id": "3", 
       "interestName": "i3" 
      } 
     ] 
    }, 
    "2": { 
     "id": "4", 
     "name": "u4", 
     "interests": [] 
    } 
} 
+0

솔루션 1이 재미 있다고 들립니다. 몇 가지 코드로 조금 도와 주실 수 있습니까? Iam은 MySQL과 PHP를 처음 접했고 google에서 무엇을 검색해야할지 모르겠다./ –

+0

@ BenjaminWolf 나는 나의 대답을 업데이트했다. – stepozer

+0

좋은 답변, 고마워. 그러나 나는 그것이 작동하도록하지 않습니다. 각 줄 다음에 echo "x"를 써서이 시점에서 끝납니다 :foreach ($ rawUsers as $ user) { } 이 foreach에서 코드를 제거하더라도이 foreach 후에는 에코 출력이 없습니다. 다시 제발 도와 주실 수 있습니까? –

0

나는 이런 내 요구에 코드를 변경할 수 있지만, 내가 구글 크롬에서 그것을 호출 할 때이 오류가 표시되지 않습니다 :

<? 
$pdo = new PDO('mysql:host=localhost;dbname=tesst', 'root', ''); 

// add your conditions into WHERE section 
$stmt = $pdo->prepare('SELECT * FROM User WHERE 1=1'); 
$stmt->execute(); 
$rawUsers = $stmt->fetchAll(PDO::FETCH_ASSOC); 

$userIds = array(); 
$users = array(); 
foreach ($rawUsers as $user) { 
    $userIds[] = (int)$user['id']; 
    $users[$user['id']] = $user; 
    $users[$user['id']]['interests'] = array(); 
} 

$stmt = $pdo->prepare(' 
    SELECT * 
     FROM User_Ref_Interests 
      JOIN REF_Interests 
      ON REF_Interests.ref_interests_id = User_Ref_Interests.ref_interests_id 
    WHERE User_Ref_Interests.userid IN ('.implode(',', $userIds).') 
'); 
$stmt->execute(); 
$interests = $stmt->fetchAll(PDO::FETCH_ASSOC); 

foreach ($interests as $interest) { 
    $users[$interest['userid']]['interests'][] = array('ref_interest_id' => $interest['ref_interests_id'], 'interestName' => $interest['interestName']); 
} 

echo '<pre>'; 
echo json_encode($users, JSON_PRETTY_PRINT); 
echo '</pre>'; 

출력 될 것입니다 : 그것은 단지 DB에서 데이터를 필요로받을 .

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
// 
// NOTE: this code for PHP 5.4 and greater (because i use new array syntax) 
// 
echo "0"; 

$pdo = new PDO('mysql:host=servername;dbname=dbname', 'name', 'pw'); 
echo "1"; 
// add your conditions into WHERE section 
$stmt = $pdo->prepare('SELECT * FROM user WHERE 1=1'); 
$stmt->execute(); 
$rawUsers = $stmt->fetchAll(PDO::FETCH_ASSOC); 
echo "2"; 
$userIds = []; 
$users = []; 
foreach ($rawUsers as $user) { 
    $userIds[] = (int)$user['id']; 
    $users[$user['id']] = $user; 
    $users[$user['id']]['interests'] = []; 
} 
echo "3"; 
$stmt = $pdo->prepare(' 
    SELECT * 
     FROM zuordnunguserinteressen 
      JOIN interessen 
      ON interessen.id = zuordnunguserinteressen.InteressenID 
    WHERE zuordnunguserinteressen.UserID IN ('.implode(',', $userIds).') 
'); 
echo "4"; 
$stmt->execute(); 
$interests = $stmt->fetchAll(PDO::FETCH_ASSOC); 
echo "2"; 
foreach ($interests as $interest) { 
    $users[$interest['userid']]['interests'][] = ['InteressenID' => $interest['InteressenID'], 'Interesse' => $interest['Interesse']]; 
} 

echo '<pre>'; 
echo json_encode($users, JSON_PRETTY_PRINT); 
echo '</pre>'; 

?>