在逗号分隔列表中搜索字符串

Posted

技术标签:

【中文标题】在逗号分隔列表中搜索字符串【英文标题】:Search string in comma separated list 【发布时间】:2012-11-08 01:35:29 【问题描述】:

我正在尝试搜索其成分中不包含任何搜索词的食谱表。每个配方的成分存储在一个字段中,以逗号分隔。

我尝试过使用 WHERE NOT MATCH...AGAINST,但这在我搜索豌豆时不起作用。它将返回带有豌豆蛋白的结果。我不需要那个。这也是复数的问题。

我尝试使用 NOT REGEXP,但我对正则表达式不太熟悉,而且我过去两天所做的所有谷歌搜索都没有产生结果。

有什么方法可以在此表中的该字段中搜索多个值并在结果中排​​除它们?

【问题讨论】:

我会把配料放在不同的表中:reciperecipe_ingredientingredients 或者你可以使用NOT FIND_IN_SET() 我试过 FIND_IN_SET 无济于事。它仍然遇到豌豆的问题!这是针对过敏数据库的,所以如果有人对豌豆过敏,我不能在结果中含有豌豆纤维或豌豆蛋白。这只是一个例子case1352如果我把配料我仍然有同样的问题不是吗?我不是数据库设计方面的专家,所以如果这是更好的方法,但我仍然需要搜索它 我开始认为我的第一种方法是最好的,但不匹配。那么我可以添加到我的 php 以包含类似的术语来搜索和排除? 你能展示一下你的表结构吗? 【参考方案1】:

查看 MATCH... AGAINST... 的运算符

我认为您正在寻找的是:

WHERE MATCH(ingredients) AGAINST ("-pea*" in boolean mode)

例子:

pea protein,radish
// not returned (as desired)

peas,beans
// not returned (as desired)

但可能仍然存在问题:

peanut butter,bacon
// not returned (not as desired)

green pea soup,bacon
// returned (not as desired)

我有点想“正确”做这件事,您需要每种成分的元数据。

或者,您也可以将过敏原“标签”应用于食谱 - 与成分本身分开。

例如,如果有人对“麸质”过敏,那实际上并不是配方级别的成分。这是许多配方成分的属性...

这种方法需要您编制所有已知过敏原的列表,然后将它们应用于食谱,不确定您的上下文,但过敏原标记可以作为一项民俗学任务。

【讨论】:

我觉得你是对的,我只需要继续和运营商一起玩。我喜欢你为某些过敏原标记配方的想法,但不幸的是,这必须在这些患者的成分水平上。

以上是关于在逗号分隔列表中搜索字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中计算逗号分隔列表中的字符串项

在单元格中搜索逗号分隔的数字

Helm-动态字符串的逗号分隔列表

如何将字符串列表连接在一起,每个值之间用逗号分隔?

如何在选择语句的“NOT IN”子句中使用逗号分隔的字符串列表作为 pl/sql 存储的函数参数

如何将逗号分隔的字符串转换为列表?