2014-09-19 71 views
-2

我已内连接两个表和列中的数据是数组ID:在MYSQL NOT LIKE INNER JOIN

table : blocks have unload_category_id = ',12,19,' 
table : videos have category_id = ',1,4,12,n,...,' 

我要当查询在影片表中的所有数据,但没有查询的影片有12个类别,19或N编号为

WHERE ... AND videos.category_id NOT LIKE ('%,12,%','%,19,%') 

返回错误。

帮我修复不喜欢的条件。谢谢!

+0

大多数时候,这不是一个好想法在一列中存储字符分隔的值列表。这是要求这样的麻烦。你必须使用'category_id不喜欢'%,12,%'和category_id不喜欢......' – VMai 2014-09-19 10:01:47

+0

谢谢你。我解决错误。我使用更多的价值。它工作。 – 2014-09-19 10:08:12

+0

你使用了多个'category_id NOT LIKE..'吗?如果是,那么 - 当你必须检查10个或更多的值时,有这么长的查询是不好的。 @拉坦的REGEXP在这里看起来不错。 – 2014-09-19 10:27:10

回答

2

你应该将你的数组ID分割成表格(即它的用途),并且你将能够使用SQL的全部功能(如子查询)。

现在对于你的问题,有语法错误:

WHERE ... AND videos.category_id NOT LIKE ('%,12,%','%,19,%') 

应该是:

WHERE ... AND (videos.category_id NOT LIKE '%,12,%' OR videos.category_id NOT LIKE '%,19,%') 
1

刚刚尝试做这个...

WHERE ... AND videos.category_id NOT REGEXP '(^|,)(12|19|n)(,|$)';