从同一个表mysql中选择多个equals

时间:2017-07-25 15:24:19

标签: php mysql

创建一个数据库搜索系统,使用php和mysql搜索输入值但使用固定元素从下拉列表

e.g。

SELECT * from mytable where fname LIKE '%INPUT%' or lname LIKE '%INPUT%' and city = 'Dublin';

问题只是最后一部分正在执行,结果显示都柏林的所有内容而忽略了第一部分。

如何正确构建查询?

5 个答案:

答案 0 :(得分:4)

Exception可能无法按您的意愿进行评估:

Throwable

相反:a OR b AND c其中:

SELECT 1 OR 0 AND 0;
-- 1

答案 1 :(得分:0)

SQL遵循您在其他地方看到的布尔运算符的顺序。您必须使用括号来强制执行我认为您想要的分组类型。 A or B and C正如您所评估的那样A or BC。请尝试以下方法:

SELECT * FROM mytable WHERE (fname LIKE '%INPUT%' OR lname LIKE '%INPUT%') AND city = 'Dublin';

答案 2 :(得分:0)

这是一个简单的逻辑问题(如果我正确理解你的需要)。

SELECT * from mytable 
        where (fname LIKE '%INPUT%' or lname LIKE '%INPUT%') and city = 'Dublin';

应该解决你的问题。

你想要的结果是输入就像fname或lname,而城市是都柏林,但是,由于order of operations,AND在OR之前执行。所以你真的要(在你的原始查询中)lname就像输入而城市是都柏林的情况,或者fname就像输入一样。

我们通过使用括号来解决这个问题,如图所示,因为然后在AND之前对它们进行求值,因为括号在执行中具有更高的顺序。

答案 3 :(得分:0)

在布尔运算中,AND优先于OR(如乘法和除法优先于正常算术中的求和和减法)。

在你的where子句中,你写道:

fname LIKE '%INPUT%' or lname LIKE '%INPUT%' and city = 'Dublin'

默认为:

fname LIKE '%INPUT%' or (lname LIKE '%INPUT%' and city = 'Dublin')

但你可能想要这样做(你必须使用括号):

(fname LIKE '%INPUT%' or lname LIKE '%INPUT%') and city = 'Dublin'

我希望它有所帮助。

答案 4 :(得分:0)

从表面上看,我假设您要检索将Dublin作为城市的姓氏或与您的字符串匹配的名字的条目。

这不是你写的,因为 AND 的优先级(之前已经解决)比 OR 更高。

你应该试试这个:

SELECT * from mytable where (fname LIKE '%INPUT%' or lname LIKE '%INPUT%') and city = 'Dublin';