mysql - 具有特殊修改的 SQL 选择查询

标签 mysql sql

我有一个问题,我不知道是否有任何方法可以仅借助 SQL 来解决它。 我有一张表 users

+----+------------+
| ID |  group_id  |
+----+------------+
| 1  |   1;2;3    |
+----+------------+  
| 2  |  1;2;3;4   |
+-----------------+
| 3  |  1;2;3;6   |
+-----------------+
| 4  |   1;2;6    |
+-----------------+

我知道它不是正常形式,但我无法更改它,因为它已被客户使用。

所以问题不在于向用户显示我没有的组。

例如:如果我为 ID = 3 的用户进行选择。我需要显示用户 1、3 和 4,因为用户 ID = 3 包含用户 ID = 1 的所有组,但我不应该显示用户ID = 2.

我的同事帮我找到最好的解决方案,如果有人感兴趣的话:

SELECT *
FROM `users`
WHERE CONCAT('[',REPLACE('1;2;3;6', ';', ']['), ']') LIKE CONCAT('%[', REPLACE(group_id,';',']%['),']%')

最佳答案

MySQL 有一个用于此类用例的内置命令,find_in_set。 不幸的是,它只适用于以逗号分隔的值,不适用于以分号分隔的值,但这也很容易克服:

SELECT *
FROM   users
WHERE  FIND_IN_SET('3', REPLACE(group_id,';',','))

SQLFiddle

关于mysql - 具有特殊修改的 SQL 选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19378657/

相关文章:

mysql - 加入 2 个查询结果

mysql - 如果count=0,如何包含SQL计数的结果?

php - 为什么在 PDO 中使用 bindParam 而不用 array()?

php - 我应该一直进行MySQL错误检查吗?

mysql: 使用 sort_union(sourceClass,destinationClass);在解释计划中

php - 我需要在 Controller 中创建一个函数来显示特定 View ,其文件名由数据库确定。 - 拉拉维尔

mysql - 找不到父 key 解决方法

sql - 在单个文本中将 SQL 表行与条件连接起来

php - cre 加载 6.4.1 管理

SQL - 多注册条件查询