Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql-为什么sql查询选择不必要的值?_Mysql_Conditional Statements - Fatal编程技术网

mysql-为什么sql查询选择不必要的值?

mysql-为什么sql查询选择不必要的值?,mysql,conditional-statements,Mysql,Conditional Statements,我想选择条件为true的行。我有一个名为command的列,如果列值包含(由我定义的)字符串,则添加到结果 我的问题是选择行,因为查询没有看到WHERE语句,如果列命令包含字符串,它会选择所有数据 SELECT * FROM `admin_log` WHERE `admin_log`.`user` = 'Admin' AND command LIKE '%aznot%' OR command LIKE '%hango%' ORDER BY `order_id` DESC

我想选择条件为true的行。我有一个名为
command
的列,如果列值包含(由我定义的)字符串,则添加到结果

我的问题是选择行,因为查询没有看到WHERE语句,如果列
命令
包含字符串,它会选择所有数据

SELECT * 
FROM `admin_log` 
WHERE `admin_log`.`user` = 'Admin' 
    AND command LIKE '%aznot%' 
    OR command LIKE '%hango%' 
ORDER BY `order_id` DESC 
LIMIT 0, 50
例如,我有3个管理员帐户:Admin、Zuppa、Grund。如果命令列包含:aznot或hango,我想按帐户管理员选择所有数据


我做错了什么?

你需要一些括号

SELECT * 
FROM `admin_log`
WHERE `admin_log`.`user` = 'Admin'  
AND (command LIKE '%aznot%' OR command LIKE '%hango%')
ORDER BY `order_id` 
DESC LIMIT 0, 50

试着这样做:

SELECT * FROM `admin_log` WHERE `admin_log`.`user` = 'Admin' AND (command LIKE '%aznot%' OR command LIKE '%hango%') ORDER BY `order_id` DESC LIMIT 0, 50
SELECT * FROM `admin_log` WHERE `admin_log`.`user` = 'Admin' AND (command LIKE '%aznot%' OR command LIKE '%hango%') ORDER BY `order_id` DESC LIMIT 0, 50

最好将OR语句分离成单独的表达式,以防止引擎误解


您需要正确嵌套条件。请参阅SQL中逻辑运算符的优先级规则,查询返回的是什么。您得到的是什么样的结果?
SELECT * FROM `admin_log` WHERE `admin_log`.`user` = 'Admin' AND (command LIKE '%aznot%' OR command LIKE '%hango%') ORDER BY `order_id` DESC LIMIT 0, 50
SELECT * 
FROM   `admin_log` 
WHERE  `admin_log`.`user` = 'Admin' 
       AND (command LIKE '%aznot%'
        OR command LIKE '%hango%' )
ORDER  BY `order_id` DESC 
LIMIT  0, 50