2015-07-20 119 views
1

要在我的腳本中修剪發言權,我決定使用1個PDO準備跨越一組預定義的表。 PDO在while循環中執行,並且在while循環內有一個foreach來構建每個結果集的輸出。Foreach與PDO查詢嵌套在一個while循環中

這是搜索的代碼。該腳本當前搜索3個表格以獲得結果(通過while迭代)。我們將它們稱爲表格a,b和c。對於經過測試的搜索,它在表a中找到2個結果,在表b中找到0個,在表c中找到1個。

儘管總共找到3個結果,但它只顯示2.一個來自表'a',一個來自表'c'。該腳本不是從表'a'中的第二次查找來構建結果。

我已經看了看,直到我的眼睛流血,並尋找可能是我錯了,我不知道。這個代碼有什麼問題的任何想法?

// --- Build an array of places to search 
$tableArray = array("services", "webPages", "dsiu"); 
$tableCount = count($tableArray); 
$count = "0"; 
$resCount = "0"; 

$result = ""; 
while ($tableCount > $count) { 
    // -- Search tables in the array for matches 
    $quotedString = $db->quote($searchString); 
    $qSQL = "SELECT title, ldesc, SUM(MATCH(title, sdesc, ldesc) AGAINST(:string IN BOOLEAN MODE)) AS score FROM ".$tableArray[$count]." WHERE MATCH (title, sdesc, ldesc) AGAINST (:string IN BOOLEAN MODE) ORDER BY score DESC"; 
    $q = $db->prepare($qSQL); 
    $q->execute(array(':string'=>$quotedString)); 

    // -- keep a count of the results 
    $rowCount = $q->rowCount(); 

    if ($rowCount > 0) { 
     $resCount = $resCount + $rowCount; 

     // -- build result html 
     $html = $q->fetchAll(PDO::FETCH_ASSOC); 
     foreach ($html as $row) { 

      // --- Clean the results for display 
      $desc = cleanURL($row['ldesc']); 
      $desc = str_ireplace($searchString, '<b><font color="green">'.$searchString.'</font></b>', $desc); 
      $desc = substr($desc, 0, 300)."..."; 

      $result .= "<font color='red'><b>".$row['title']."</b></font><br>".$desc."<br><br>"; 

     } 
    } 

    $count++; 
} 
+0

有點偏離主題:字段名稱和查詢本身看起來都很具體< - 爲什麼有多個表呢? – VolkerK

+0

這是一個網站。該網站的不同元素在數據庫中分開。這是爲了讓訪問者搜索檢查結果的不同元素。最終所有元素都將被納入全網搜索。用戶可以從「提供的公司服務」,在線商店或「信息頁面」獲得結果,或選擇特定元素進行搜索。 – Sabyre

+0

'$ html'中的表a有2個結果嗎? – dan08

回答

0

Thanks @ dan08。我向foreach添加了一個if ($row['score'] != null) {。還發現查詢中的SUM()正在刪除應該得到的結果。

現在正在處理這些更改。