2015-07-20 67 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()正在删除应该得到的结果。

现在正在处理这些更改。