2017-01-24 26 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"; 
    } 

谢谢。

相关问题