【问题标题】:How to use String in mysql IN() function?如何在 mysql IN() 函数中使用字符串?
【发布时间】:2016-04-06 13:14:02
【问题描述】:

我的数据库表中有名为“user_id”的 VARCHAR(255) 字段,其中存储了逗号分隔的用户 ID,例如 234,235。

我的查询中有一个内部查询,如下所示,其中“s”是我的表别名:

(SELECT group_concat(concat(first_name,' ',last_name)) from users where user_id IN (s.user_id)) as user_name

现在我得到的 s.user_id 值是这样的:'234,235' 所以结果我只得到第一个用户的名字。我希望两个用户名的逗号分隔。 (我想要 => ('234','235') 或 (234,235) 以便它在 IN() 函数中工作)

使用 FIND_IN_SET() 函数是不可行的,因为我的查询太长了。

【问题讨论】:

  • 请发布完整的查询,以避免误解

标签: mysql


【解决方案1】:

将 ID 存储在您需要引用的逗号分隔字符串中是不好的设计。规范化数据并以数据库原生支持的方式存储数据会更好。

也就是说,您需要在字符串中查找用户 ID,因此一种解决方案是正则表达式。 这很慢,我认为值得在单独的表/列中重新组织您的 ID。

SELECT group_concat(concat(first_name,' ',last_name)) 
FROM users 
WHERE s.user_id REGEXP CONCAT('(^|,)', user_id, '($|,)')

这将匹配您的 ID,并在字符串的任一侧或开头或结尾处带有逗号。

【讨论】:

  • 我无法更改我的数据库,因为它已经设计好了。我试过这个查询,但它返回 NULL。
  • 在 where 子句中向后获取 user_id 字段。请查看我的编辑。
猜你喜欢
  • 1970-01-01
  • 2011-09-30
  • 2011-05-13
  • 2023-03-30
  • 1970-01-01
  • 2012-04-16
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多