2014-09-25 26 views
0

我一直在尋找如何正確地做到這一點,但沒有得到任何好結果,所以認爲ID試試我的運氣,問你們幾個小時。所以這裏是我的腳本:MySql - 你如何使用OR的多個WHERE子句

$q = $handler->prepare("SELECT * FROM users WHERE status = ? AND membership = ? AND confirmation = ? AND alpha_status = ? AND approved = ? AND type = ? OR type2 = ? OR type3 = ? OR type4 = ? OR type5 = ?"); 
$q->bindParam(1, $yes); 
$q->bindParam(2, $good); 
$q->bindParam(3, $good); 
$q->bindParam(4, $good); 
$q->bindParam(5, $yes); 
$q->bindParam(6, $search); 
$q->bindParam(7, $search); 
$q->bindParam(8, $search); 
$q->bindParam(9, $search); 
$q->bindParam(10, $search); 
$q->execute(); 

$howMany = $q->rowCount(); 

所以一切正常,但它只是抓住數據庫中的一切。我猜測多個OR沒有工作。我試圖達到的是通過搜索條件的用戶數量。使用「類型」時,所有用戶都將5種類型添加到他們的帳戶中。它可以是Alpha Bravo Charlie Delta Echo等,因此,其中一個用戶type2是Bravo,另一個用戶可能在type5中有Bravo。所以即時通訊嘗試獲得Bravo作爲一種類型的用戶總數。希望解釋它會。在此先感謝

回答

6

使用圓括號建立運算符優先級:

AND approved = ? AND (type = ? OR type2 = ? OR type3 = ? OR type4 = ? OR type5 = ?)"); 
+0

謝謝,我不能相信這就是全部簡化了查詢我必須做。 – JimmyJones 2014-09-25 21:24:35

0

您還可以使用in其中僅要求$search包括一次

SELECT u.* 
FROM users u 
WHERE status = ? AND membership = ? AND confirmation = ? AND alpha_status = ? AND 
     approved = ? AND 
     ? in (type, type2, type3, type4, type5)