2012-04-07 46 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