2017-04-14 74 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