我需要使用多个参数过滤我的查询,但我不能使用mysqli_query而不是mysql_query来执行此操作。
如果我不使用AND运算符,我的代码就能完美运行,例如:
$results = mysqli_query($connecDB,"SELECT * FROM table WHERE company='Company1' ORDER BY id DESC");
但是如果我使用AND运算符:
$results = mysqli_query($connecDB,"SELECT * FROM table WHERE company='Company1' AND company='Company2' ORDER BY id DESC");
代码不再起作用了。我四处搜索,看起来我需要准备好的语句,但我无法找到让代码工作的方法。
有人知道我做错了什么吗?
答案 0 :(得分:5)
试试:
SELECT * FROM table WHERE company IN ( 'Company1', 'Company2' ) ORDER BY id DESC
您不能同时拥有Company1
和Company2
的公司。
答案 1 :(得分:1)
首先,绝对没有两个谓词都会评估为真的行。
MySQL正在查看每一行,并检查该行是否满足谓词,在这种情况下,整个WHERE子句的结果是否返回TRUE。
如果'Company1'
列中有一行值company
,那么第一个谓词:
company = 'Company1'
将评估为TRUE;和第二个谓词:
company = 'Company2'
将评估为FALSE。
根据布尔AND
运算符的逻辑,TRUE AND FALSE
求值为FALSE
,因此不会返回该行。
这足以解释为什么查询返回0行。
如果您希望查询在company
列的值与'Company1'
或'Company2'
匹配时返回一行,则两个谓词可以与布尔值OR
组合操作
答案 2 :(得分:0)
使用OR代替AND:
SELECT * FROM table WHERE (company='Company1' OR company='Company2') ORDER BY id DESC
答案 3 :(得分:0)
实际上,它与你的逻辑有关。您必须使用OR而不是AND,因为公司字段中只能包含一个公司,而公司字段不能同时包含两个公司。因此,您必须将$查询更改为以下内容:
SELECT * FROM table WHERE (company='Company1' OR company='Company2') ORDER BY id DESC
或
SELECT * FROM table WHERE company IN ( 'Company1', 'Company2' ) ORDER BY id DESC