Mysql SQL查询未返回所需的结果,结果不相似

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

我正在运行一个简单的查询,其中使用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  `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的事