2012-04-07 48 views
1

我希望有人可以幫助以下。我正在嘗試創建用戶特定的搜索功能。當某人登錄時,他們可以運行搜索,該搜索應返回customer_reforder_details列的結果。搜索三列

我已經嘗試過以下,但它返回來自不同客戶的結果。

SELECT * 
FROM `job` 
WHERE c_name = 'John Doe' 
AND customer_ref LIKE '%do%' 
OR order_details LIKE '%do%' 

我想限制結果給特定的客戶(出於顯而易見的原因)。如果我刪除底線(OR order_details LIKE '%do%'),結果會正確鎖定到客戶,但是,如果它在那裏,我會得到包含其他客戶名稱的結果。

請注意%do%只是一個通配符搜索詞,指示門或Doreen(用於測試)。在實際的代碼中,它將是在搜索框中輸入的值。

非常感謝提前!

回答

2

您需要在您的查詢圓括號明確在什麼條件下您正在搜索:

SELECT * 
FROM `job` 
WHERE c_name = 'John doe' 
AND (customer_ref LIKE '%do%' 
OR order_details LIKE '%do%') 
+0

非常感謝,工作的魅力:) – wiggy1977 2012-04-07 10:38:06

+1

@ wiggy1977 - Fyi,使用'AND'和'OR'運算符會產生歧義。括號告訴數據庫它應該如何處理條件。否則,數據庫將應用自己的規則,這可能是也可能不是你想要的。您可能對本文感興趣:[操作員優先級如何影響MySQL SELECT查詢](http://www.databasejournal.com/features/mysql/article.php/3904221/How-Operator-Precedence-Affects-)MySQL-- -SELECT-Queries.htm – Leigh 2012-04-08 01:33:47

0

嘗試使用CONCAT例如:

SELECT * 
FROM job 
WHERE job.c_name = 'John doe' AND 
(job.customer_ref LIKE CONCAT '%do' 
OR job.order_details LIKE CONCAT '%do') 
+0

使用concat有沒有好處? – wiggy1977 2012-04-08 17:27:32

+0

是的,如果在搜索框中輸入的值是來自數據庫的兩列,例如門Doreen **。在這個問題中使用的例子http://stackoverflow.com/questions/4005251/select-from-tbl-where-clm-like-concat-other-sql-query-limit-1-how – mykey 2012-04-08 19:25:20