【问题标题】:MySQL WHERE with comma separated stringMySQL WHERE 用逗号分隔的字符串
【发布时间】:2017-11-19 05:28:50
【问题描述】:

我见过一些相关的,但一直无法让它正常工作。希望这对某人来说很容易!

我基本上是以逗号分隔的字符串从 API 接收值。我正在尝试使用可以使用此字符串的 WHERE 子句。让我举个例子。

编辑 用户填写表格并将数据保存到表格中,其中一列称为“过敏”。我现在正在寻找使用可能看起来像 "Egg,Milk,Peanuts".

的列

我已经构建了一个查询,它将为用户返回食谱,这需要考虑到字符串中的每个值。

所以我可以通过使用以下语法手动正常工作:

...
WHERE a.AllergyName = 'Egg' || a.AllergyName = 'Milk' || a.AllergyName = 'Peanut'
...

有人知道我如何动态地做到这一点吗?

【问题讨论】:

  • 您是如何从 API 中获取这些值的?对于即使用另一个 sql 或通过 GET 方法等?
  • 我实际上更新了这个问题。我意识到它实际上并不是来自 API 直接,而是来自另一个表。我意识到这是一个很大的不同!对不起
  • “打包”值列(例如您的“Allergies”CSV 列)确实意味着更简单的数据库设计,但它们也意味着对它们进行操作的查询更难实现 SARGable,因此它们的性能很差.你能完全改变数据库设计还是坚持下去?
  • 它可以更新..但即使它来自多行。我怎样才能得到我在 WHERE 子句中发布的相同查询?这只是一种 WHERE IN 类型的情况吗?
  • 在您的问题中添加表架构将非常有帮助。

标签: mysql where


【解决方案1】:

我从您的问题中假设您正在为每个用户存储过敏信息,并且每个用户都有一些唯一标识符,例如 userId

尝试以下方式:

Select *
from Table1 t1
where AllergyName in (select AllergyName from Table2 t2 
                      where userId = (put Id here))

【讨论】:

  • 在此处列出的表 2 中……过敏仍列为“牛奶、鸡蛋、花生”。所以我觉得我仍然遇到同样的问题?
  • 我不明白。这里有什么问题?如果这些是逗号分隔的值,那将不是问题。这就是in 的工作原理。
  • 子查询将返回“牛奶、鸡蛋、花生”。所以整个查询看起来像:```Select * from Table1 t1 where AllergyName in ("Milk,Egg,Peanuts")。应该是这样的吗?
  • 没有。双引号不应该在那里。
  • 好吧,我想我只是没有正确地问我的问题,或者我误解了我的设置中的某些内容。但是对于我所问的,这应该是正确的答案。否则我会继续努力。谢谢
猜你喜欢
  • 1970-01-01
  • 2016-09-04
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 2011-10-17
  • 1970-01-01
相关资源
最近更新 更多