2013-05-15 130 views
1

好吧,我很難理解如何做某個查詢。PDO多個查詢理解問題

這就是我試圖完成:

我從查詢結果試圖輸出DISTINCT品牌。因此,當用戶搜索「SHOE」實例時,我可以輸出數據庫中的所有鞋子,並在用戶可以選擇某個品牌的一側選擇過濾結果。我已經可以輸出MATCH AGAINST查詢所需的所有數據,我只是不知道如何去做查詢可以用PDO查詢我的第一個查詢

以下是我有:

<?php 
require_once 'login.php'; 
$db = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
$usersearch=strip_tags($_POST['searchquery']); 
$query=$db->prepare("SELECT * FROM products WHERE MATCH(description) AGAINST (? IN BOOLEAN MODE) OR MATCH(brand) AGAINST(? IN BOOLEAN MODE);SELECT DISTINCT brand FROM products"); 
$query->execute(array('+%'.$usersearch.'%','+%'.$usersearch.'%')); 
$result=$query->fetchALL(PDO::FETCH_ASSOC); 
?> 

我的問題是與"SELECT DISTINCT brand FROM products"

這是執行多個查詢的正確方法嗎?這是否將每個品牌FROM THE FIRST QUERY選擇在分號的左側,或者只是在數據庫中的每一行上執行查詢?

任何幫助,將不勝感激。

我還挺站立不安。

回答

1

不,您無法使用PDO在一個字符串中準備和執行多個查詢。

您可以使用mysqli::multi_query,但沒有準備。但它對於多重選擇無用。

您可以使用union,但所選字段的數量必須相同。例如

SELECT brand FROM products 
    WHERE 
     MATCH(description) AGAINST (? IN BOOLEAN MODE) 
     OR MATCH(brand) AGAINST(? IN BOOLEAN MODE) 
UNION SELECT DISTINCT brand FROM products 

P.S.或者只是使用兩個分開的查詢:^)

+0

謝謝sectus的回覆。我想通過一個數組循環,而不是回顯屏幕重複。 – Korupshen

-1

我發佈這個答案,以防其他人遇到這個問題。我使用了一個空數組來存儲每個品牌,如果有任何匹配的值,則使用continue來傳遞它。

<?php 
    $emptyarray=array(); 
    foreach($result as $row) { 
     $individualbrand=$row['brand']; 
     if(in_array($individualbrand,$emptyarray)) 
      continue; 
     $emptyarray[]=$individualbrand; 
     for($i=0;$i<10;++$i) 
      echo '<a href="#">'.$emptyarray[$i].'</a><br />';} 
      ?> 

這將從數據庫結果中輸出UNIQUE品牌名稱。空數組被創建,在檢查重複項時被填充。然後一個for循環遍歷每個數組值。 (我用了10個,因爲我認爲我不會因爲搜索而產生10個以上的品牌名稱。)希望這可以幫助未來的某個人。

+0

哦,上帝......這段代碼是完全錯誤的。 – sectus

+0

其實最後一個右括號需要在行後面:$ emptyarray [] = $ individualbrand;好的仙人掌,也許我不應該問這個問題,因爲我需要多個查詢來選擇不同的品牌。還有一件事,「哦,上帝......這個代碼完美地與我發送的每個數據庫查詢一起工作。」創建具有唯一值的數組並使用for循環回顯有什麼問題?我沒有看到任何錯誤,我會再次爲你效力:它對我有效。 – Korupshen

+0

1.您可以使用pure sql。 – sectus