Mysql SQL查询未返回所需的结果,结果不相似
我正在运行一个简单的查询,其中使用NOT LIKE比较文本列,但结果不正确。尝试了很多,但没有运气。以下是查询:Mysql SQL查询未返回所需的结果,结果不相似,mysql,sql,Mysql,Sql,我正在运行一个简单的查询,其中使用NOT LIKE比较文本列,但结果不正确。尝试了很多,但没有运气。以下是查询: SELECT * FROM `restaurant_session_log` WHERE `restId` = '176' OR branchId = '203' OR `multi_vendorId` LIKE '%,176%' OR `multi_vendorId` LIKE '%,176,%' OR `multi_vendorId` LIKE '%176,%' OR
SELECT *
FROM `restaurant_session_log`
WHERE `restId` = '176'
OR branchId = '203'
OR `multi_vendorId` LIKE '%,176%'
OR `multi_vendorId` LIKE '%,176,%'
OR `multi_vendorId` LIKE '%176,%'
OR `multi_vendorId` LIKE '%[176]%'
AND (`excluded_branch_id` NOT LIKE '%,203%' OR `excluded_branch_id` NOT LIKE '%,203,%' OR `excluded_branch_id` NOT LIKE '%203,%' OR `excluded_branch_id` NOT LIKE '%[203]%' )
结果如下:
现在,正确的结果只包括第二行,id=27707,因为我在查询中提到了将结果带到排除的位置\u分支\u id!=%203%,但我不明白为什么它在excluded\u branch\u id列中给出了203的行
请帮忙 不要在单个字符串中存储多个值!不要把数值放在字符串中!这是你问题的根本原因 有时,您无法改变某人非常非常糟糕的数据建模决策。你明显的问题是括号 但是,如果使用find_in_set,逻辑将简化。我认为你打算:
WHERE (`restId` = '176' OR branchId = '203' OR
find_in_set(176, `multi_vendorId`)
) AND
(find_in_set(203, `excluded_branch_id`)
不要在一个字符串中存储多个值!不要把数值放在字符串中!这是你问题的根本原因 有时,您无法改变某人非常非常糟糕的数据建模决策。你明显的问题是括号 但是,如果使用find_in_set,逻辑将简化。我认为你打算:
WHERE (`restId` = '176' OR branchId = '203' OR
find_in_set(176, `multi_vendorId`)
) AND
(find_in_set(203, `excluded_branch_id`)
可以使用REGEXP简化匹配。如果其两侧都有单词边界,则以下内容与203匹配:
(excluded_branch_id IS NULL OR excluded_branch_id NOT REGEXP '[[:<:]]203[[:>:]]')
例如:
可以使用REGEXP简化匹配。如果其两侧都有单词边界,则以下内容与203匹配:
(excluded_branch_id IS NULL OR excluded_branch_id NOT REGEXP '[[:<:]]203[[:>:]]')
例如:
$query=SELECT*从year_发行的电影中选择,该电影与'200_'不同
$result=db_query$query,数组“:movies'=>$value $query=SELECT*FROM year_发行的电影与'200'不同
$result=db_query$query,数组“:movies'=>$value 尝试使用与[203]不同的方法。主要原因是restid与[203]相同,因此它满足restid=176的条件,并且因为在它内部,如果它们中的任何一个符合条件,那么结果将与[203]相同?如果只有一个值,则将其包装存储在[]中?这应该也有多个值,例如[203176345]。。。为了便于在PHP中以数组的形式检索,我们使用方括号进行了包装。我现在知道这不是一个好的做法,但这就是现有系统如何运行并移交给meTry的原因,与[203]不同。主要原因是restid对两者都是相同的,因此它满足restid=176的条件,因为在它内部,如果它们中的任何一个符合,那么它将产生[203]的结果是什么?如果只有一个值,则将其包装存储在[]中?这应该也有多个值,例如[203176345]。。。为了便于在PHP中以数组的形式检索,我们使用方括号进行了包装。我现在明白了这不是一个好的做法,但这就是现有系统的运行方式,并将其交给了美沙酮公司征求建议!所以我应该在分解和正常化之后去做,对吗?使用当前结构无法获得期望的结果?使用子查询或任何其他技巧?@hyd00。。我回答了你的问题。谢谢你的建议!所以我应该在分解和正常化之后去做,对吗?使用当前结构无法获得期望的结果?使用子查询或任何其他技巧?@hyd00。。我回答了你的问题。很有魅力!非常感谢Salman提醒我REGEXPWorks的魅力!非常感谢萨尔曼提醒我关于REGEXP的事