2017-01-24 71 views
2

我有兩個表:兩個表,顯示從一個多個結果相匹配的ID

post_languages有以下的列:languageIDlanguageName

post_to_languages用:帖子IDpostLanguage

我想要實現的是顯示與帖子相關的所有語言。

例如:發表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"; 
} 

不要緊,我試過了,我只能獲得一種語言。也許我應該先選擇ID來選擇post_to_languages。

回答

0

您不需要此嵌套循環,請嘗試聯接或子查詢。向您顯示子查詢。如果您有大量的行,則內部聯接會更快。但是子查詢仍然比嵌套循環更快。

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

如果您還沒有看到任何結果,替換:與帖子ID一個真正的價值,並嘗試在控制檯中。

+0

是的,這是正確的答案,適用於子查詢和內部連接,不能滿足答案,但是,謝謝 –

0

您從差異中選擇了不同的列。表。表post_to_language中的 必須與languageId的數據類型相同。

請試試這個代碼

//獲取語言ID

$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"; 
    } 

謝謝。

相關問題