2017-01-24 3 views
2

ID가 일치 한 여러 결과 표시 의 LanguageID, languageName을두 테이블은, I는 두 개의 테이블이

post_to_languages와 : postID을 , 포스트 언어

내가 달성하고자하는 것은 게시물과 관련된 모든 언어를 표시하는 것입니다.

예 : 포스트 1, 언어 : 프랑스어, 러시아어

어쩌면 나의 접근 방식은 잘못하지만 제가 시도했던 방법 중 하나입니다

//get language id 
$stmt2 = $db->prepare('SELECT languageID FROM post_to_languages WHERE postID = :postID'); 
$stmt2->execute(array(':postID' => $row['postID'])); 

//Count total number of rows 
$rowCount2 = $stmt2->rowCount(); 

if ($rowCount2 > 0) { 
    $row2 = $stmt2->fetch(PDO::FETCH_ASSOC); 
    foreach ($row2 as $langID) { 
     $stmt3 = $db->prepare('SELECT languageName FROM post_languages WHERE languageID = :languageID'); 
     $stmt3->execute(array(':languageID' => $langID)); 
     $row3 = $stmt3->fetch(); 
     $lang_string = $row3['languageName']; 
    } 
} else { 
    $lang_string = "Unknown"; 
} 

내가 뭘하려 상관 없어, I 하나의 언어 만 얻는다. 어쩌면 먼저 ID로 post_to_ 언어를 선택해야합니다.

답변

0

이 중첩 루프가 필요하지 않습니다. 조인 또는 하위 쿼리를 사용해보십시오. 하위 쿼리를 표시합니다. 행 수가 많으면 내부 조인이 빨라집니다. 그러나 하위 쿼리는 여전히 중첩 된 루프보다 빠르게 힙입니다.

SELECT languageName FROM post_languages WHERE languageID IN 
(SELECT languageID FROM post_to_languages WHERE postID = :postID') 

여전히 결과가 표시되지 않으면 postID를 실제 값으로 바꾸고 콘솔에서 사용해보십시오.

+0

예, 이것은 정답입니다. 하위 쿼리와 내부 조인 모두에서 작동하지만 답변을 upvote 할 수는 없지만 감사합니다. –

0

diff에서 다른 열을 선택했습니다. 표. post_to_language 테이블의 은 languageId와 동일한 데이터 유형이어야합니다.

$stmt2 = $db->prepare('SELECT postLanguage FROM post_to_languages WHERE postID = :postID'); 
$stmt2->execute(array(':postID'=>$row['postID'])); 

    //Count total number of rows 
    $rowCount2 = $stmt2->rowCount(); 

    if($rowCount2 > 0){ 

    $row2 = $stmt2->fetch(PDO::FETCH_ASSOC); 

    foreach($row2 as $langID) { 

     $stmt3 = $db->prepare('SELECT languageName FROM post_languages WHERE languageID = :languageID'); 
    $stmt3->execute(array(':languageID'=>$langID)); 

    $row3 = $stmt3->fetch(); 
    $lang_string = $row3['languageName']; 

    } 

    } else { 
      $lang_string = "Unknown"; 
    } 

감사합니다 언어 ID를 얻을이 코드

//을 시도하십시오.

관련 문제