在PHP MySQL中从逗号分隔的字符串中查找精确值

在PHP MySQL中从逗号分隔的字符串中查找精确值,php,mysql,regex,Php,Mysql,Regex,我有一个产品表,其中包含一个名为“categories”的字段,用于将与产品相关的类别ID保存为逗号分隔的值。我正在使用regexp从一个类别中搜索产品 假设存在包含4,24,1,31 我的表情是 ..WHERE categories REGEXP ',?4,?' 但这将返回类别4和24 我只需要显示类别4 我遗漏了什么吗?使用 WHERE categories REGEXP "(^|,)4(,|$)" 如果被逗号包围或在字符串的开始/结束处,则匹配4 在当前版本中,两个逗号都是完全可选的,

我有一个产品表,其中包含一个名为“categories”的字段,用于将与产品相关的类别ID保存为逗号分隔的值。我正在使用regexp从一个类别中搜索产品

假设存在包含
4,24,1,31
我的表情是

..WHERE categories REGEXP ',?4,?'
但这将返回类别
4
24

我只需要显示类别
4

我遗漏了什么吗?

使用

WHERE categories REGEXP "(^|,)4(,|$)"
如果被逗号包围或在字符串的开始/结束处,则匹配
4


在当前版本中,两个逗号都是完全可选的,因此
24
中的
4
匹配。

为什么要这样保存关系?你为什么不用另一张桌子?我是。但我有很多产品,每一种产品都与两个或更多类别相关。这张桌子有点大,所以呢?这是在数据库中执行操作的正确方法。现在你必须在一个巨大的表上执行REGEXP,你认为这更快吗?我认为这比使用一个单独的表好。哦,我现在很困惑。这样会不会让我将来感到沮丧?你限制了自己。当您必须找到以下产品时,会发生什么:a)catId 1和2,b)catId 1或2,c)catId从1到3,等等。。。只需制作表“product\u mtm\u category”,其中包含字段“product\u id和category\u id”。您知道这种方法是否比在\u set()中查找\u更好吗?对不起,我不知道。