mysql-为什么sql查询选择不必要的值?
我想选择条件为true的行。我有一个名为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
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