2017-04-14 56 views
0

我有一些PHP代码的问题。所以,当我在搜索框中写入一些文本时,我应该会得到更多的结果,但是我只能得到1.这发生在我用INNER JOIN添加第二个查询时。我不知道为什么我只得到1个结果而不是更多,任何人都可以提供帮助? 当我删除第二个查询时,它会显示所有结果。PHP搜索框问题

$STH = $DBH->prepare('SELECT * FROM tv_shows WHERE title like :q ORDER BY title ASC LIMIT 5'); 
$STH->setFetchMode(PDO::FETCH_OBJ); 
$STH->execute(array(
    ':q' => "%$q%" 
)); 

if($STH->rowCount()) { 
    while($row = $STH->fetch()) { 
     $poster = $row->poster; 
     $mtitle = $row->title; 
     $mrd = $row->release_date; 
     $mid = $row->id; 
     $genres = ""; 

     $STH = $DBH->prepare('SELECT g.title from genres g INNER JOIN tv_show_genres tg ON g.id = tg.genre_id INNER JOIN tv_shows t ON t.id = tg.tv_show_id WHERE t.id = :tid'); 
     $STH->setFetchMode(PDO::FETCH_OBJ); 
     $STH->execute(array(
      ':tid' => $mid 
     )); 

     if($STH->rowCount()) { 
      while($row = $STH->fetch()) { 
       $genres .= $row->title.", "; 
      } 
      echo 
      '<li> 
       <span class="search-poster"><img src="'.$poster.'"></span> 
       <span class="search-title">'.$mtitle.' ('.$mrd.')</span> 
       <span class="search-genre">'.substr($genres,0,-2).'</span> 
      </li>'; 
     } 
    } 
} 
+0

在初始选择仍然有未取消结果的情况下,您没有做过其他选择,还是您? – frz3993

+0

第一条语句和第二条语句使用相同的变量'$ STH'。 – Barmar

回答

1

您使用的是同一个变量$STH两个查询。因此,当外环回来的

while ($row = $STH->fetch()) 

线,$STH现指第二个查询。由于您已经到达查询结果的末尾,因此在此调用fetch()返回false,因此此循环也会结束。

只需使用不同的变量名称,例如$show_STH$genre_STH

但是,更好的解决方案是使用单个查询。

SELECT s.poster, s.title AS show_title, s.release_date, g.title AS genre_title 
FROM (SELECT * 
     FROM tv_shows 
     WHERE title like :q 
     ORDER BY title ASC 
     LIMIT 5) AS s 
INNER JOIN tv_show_genres tg ON s.id = tg.tv_show_id 
INNER JOIN genres g ON tg.genre_id = g.id 
ORDER BY s.title 

很多时候你会发现自己在嵌套循环这样执行查询的时候,你可以连接两个查询单个查询替换它。

+0

谢谢队友,我只是改变了变量名称,它正在工作。 – dovlapsy