2012-09-02 5 views
0

하나의 JSON 출력 만 원한다면이 3 가지 쿼리를 어떻게 결합 할 수 있는지 알고 싶습니다. INNER JOIN이이를 수행 할 것이라고 생각했습니다. 그러나 이것을 어떻게 사용하는지 모른다. 누군가 나를 올바른 길로 안내 할 수 있습니까?Inner Joining 3 queries

$json = array(); 
$following_string = mysqli_real_escape_string($mysqli,$_SESSION['id']); 
$call="SELECT * FROM streamdata WHERE streamitem_id < '$lastID' AND streamitem_target=".$following_string." OR streamitem_creator=".$following_string." ORDER BY streamitem_id DESC LIMIT 10"; 
$chant = mysqli_query($mysqli, $call) or die(mysqli_error($mysqli)); 

$json['streamdata'] = array(); 

while ($resultArr = mysqli_fetch_assoc($chant)) { 

    $json['streamitem_id'] = $resultArr['streamitem_id']; 
    $json['streamitem_content'] = $resultArr['streamitem_content']; 
    $json['streamitem_timestamp'] = Agotime($resultArr['streamitem_timestamp']); 

$json['streamdata'] = $json; 
} 

/***** COMMENTS *****/ 
$check = "SELECT comment_id, comment_datetime, comment_streamitem, comment_poster, comment_content FROM streamdata_comments WHERE comment_poster=".$following_string." "; 
$check1 = mysqli_query($mysqli,$check); 
$json['streamdata_comments'] = array(); 

while ($resultArr = mysqli_fetch_assoc($check1)) { 

    $json['comment_id'] = $resultArr['comment_id']; 
    $json['comment_content'] = $resultArr['comment_content']; 
    $json['comment_poster'] = $resultArr['comment_poster']; 
    $json['comment_datetime'] = Agotime($resultArr['comment_datetime']); 
    $json['comment_streamitem'] = $resultArr['comment_streamitem']; 

$json['streamdata_comments'] = $json; 
} 

/***** USERS *****/ 

$check = "SELECT * FROM users WHERE id=".$following_string.""; 
$check1 = mysqli_query($mysqli,$check); 
$json['users'] = array(); 

while ($resultArr = mysqli_fetch_assoc($check1)) { 

    $json['username'] = $resultArr['username']; 
    $json['id'] = $resultArr['id']; 
    $json['first'] = $resultArr['first']; 
    $json['middle'] = $resultArr['middle']; 
    $json['last'] = $resultArr['last']; 

$json['users'] = $json; 
} 


echo json_encode($json); 
} 
?> 
+0

"사용 방법을 모르겠다"- 설명서를 읽으려고 했습니까? – zerkms

+0

'해야 할 일'입니다. 그러나 그렇습니다 나는 단서가 있고 단서가 없다. – dave

+0

구체적으로 읽은 내용이 있습니까? – zerkms

답변

0

일부 이전 답변에서는 관련없는 테이블을 조인 할 수 없다고 제안했지만 분명히 관련없는 테이블은 아닙니다. streamdatastreamdata_comments 테이블은 매우 밀접하게 관련되어 있으며 users 테이블은 다른 테이블의 사용자 ID 값을 이름에 매핑합니다. 는 SQL 수준에서

, 이들은 쉽게 결합 될 수있다 :

결과가 JSON 문자열로 포장에 대한 의미가 있는지 여부
SELECT d.*, c.*, u.* 
    FROM streamdata   AS d 
    JOIN streamdata_comments AS c ON d.streamitem_ID = c.comment_streamitem 
    JOIN users    AS u ON u.user_id = c.comment_poster 
WHERE c.comment_poster = '$following_string' 
    AND d.streamitem_id < '$lastID' 
    AND (d.streamitem_target = '$following_string' OR 
     d.streamitem_creator = '$following_string'); 

내가 교황 할 수있는 다른 문제입니다. 이렇게하면 각 스트림 항목과 관련된 각 설명에 대한 설명 정보에서 하나의 레코드가 제공됩니다.

+0

어쩌면 당신은 내가 조나단, 내가 지금까지 가지고있는 것으로 내 질문 코드를 업데이 트했습니다 뭔가 도와 주실 수 있습니다. 나는 10 개의 결과를 인쇄 할 필요가있다. 그리고 내 코드는 거의 작동 중이고 방화범에 대한 내 응답은이 결과가 10 개 뿐이며 결과를 더 많이로드 할 때 1을 표시합니다.이 문제를 해결하려면 무엇을해야합니까? – dave

+0

@dave : 간결하게, 나는 모른다. 아마 문제는'$ json'에 추가하는 것이 아니라 할당하는 것입니다. 생성중인 SQL을보고 리턴 된 결과를 리턴해야합니다. DBMS가 제공하는 정보를 알려줍니다. 그런 다음 JSON에서 올바르게 패키지하는 방법을 알아보아야합니다. 표시되는 행이 예상했던 세트의 마지막 행인 경우 '추가 대신 덮어 쓰기'진단이 올바르다 고 가정합니다. 그러나 당신이 그것을 바로 잡는 방법에 관해서는 내 지식을 넘어선 것입니다. –

0

관련없는 데이터를 가져 오는 중입니다. 데이터 조인은 조인 할 데이터에 관계가있는 경우에만 유용합니다.

사과, 소 및 원숭이를 합류 할 수 없습니다.

+2

'... 어디 life_type = 'carbon_based''? –

+0

그래서 json_encode ($ json)에서 하나의 출력으로 배열을 함께 결합하는 것이 가능합니다. – dave

2

관련없는 데이터를 가져 오는 중이므로 SQL 수준에서 조인을 사용할 수 없습니다.

하지만 JSON은 먹이를주는 방법이나 방법에 신경을 쓸 수 없습니다. 적절한 PHP 수준의 데이터 구조를 구축하십시오.

$data = array(); 
$data['streamdata'] = array(); 
... insert data from 'streamdata' query... 
$data['streamdata_comments'] = array(); 
... insert comment data ... 
$data['users'] = array(); 
... insert user data ... 

각 쿼리의 데이터가 포함 된 3 방향 배열을 제공합니다. 그런 다음 $data 구조체 전체를 json_encode에 전달하면 SQL 연결을 건드리지 않고 단일 데이터 구조에서 3 개의 평가되지 않은 쿼리를 얻을 수 있습니다.

+0

완벽하게 작동합니다. 지금은 단지 1 개의 결과 만 되돌려 보냅니다. 9 개 더 보내야 해. 어떻게하면 좋을까요? – dave

+0

나는 그것의 부분을 가지고있다. 방화 광에서 나는 $ json [ 'streamdata'] = $ json을 사용하여 나의 응답에서 10 개의 결과를 얻었다; 루프 /. 그러나 오직 1 개의 결과 만 내 사이트에 인쇄됩니다. 거의 다 왔어. – dave

+0

배열을 만들 필요가 있습니다. 문자열을 반복해서 지정하는 것입니다. 그것을 $ json [ 'streamdata'] [] = $ json'으로 만드십시오. 여분의'[]'를 주목하라. –