Mysql-将int字段与另一个表中的逗号分隔字段进行比较

Mysql-将int字段与另一个表中的逗号分隔字段进行比较,mysql,Mysql,MySQL数据库中有两个表,如下所示: 用户: 计划:(计划ID是主键) 输出 由于计划表中的计划id是整数,并且用户可以保存许多计划,所以它以逗号分隔的形式存储为varchar,所以当我尝试在条件中使用时,它不起作用 SELECT * FROM plan WHERE find_in_set(plan_id,(select user.planid from user where user.userid=1)) 这将从plan表中获得3行,但我希望得到如上所述的所需输出 怎么做。?请提供任何帮助

MySQL数据库中有两个表,如下所示:

用户: 计划:(计划ID是主键) 输出
由于计划表中的计划id是整数,并且用户可以保存许多计划,所以它以逗号分隔的形式存储为varchar,所以当我尝试在条件中使用时,它不起作用

SELECT * FROM plan WHERE find_in_set(plan_id,(select user.planid from user where user.userid=1))
这将从plan表中获得3行,但我希望得到如上所述的所需输出


怎么做。?请提供任何帮助

将您的查询改写如下

查询

SELECT
   all columns you need
 , GROUP_CONCAT(Plan.Plan_Name ORDER BY Plan.planid) AS Planname
FROM
  Plan
WHERE
  FIND_IN_SET(Plan.plan_id,(
    SELECT
      User.Plan
    FROM
      user
    WHERE User.userid = 1
  )
)
GROUP BY
  all columns what are in the select (NOT the GROUP_CONCAT function)
SELECT 
   all columns you need
 , GROUP_CONCAT(Plan.Plan_Name ORDER BY Plan.planid) AS Planname
FROM 
 User 
INNER JOIN 
 Plan
ON
 FIND_IN_SET(Plan.id, User.Plan)
WHERE 
 User.id = 1
GROUP BY
 all columns what are in the select (NOT the GROUP_CONCAT function)
您还可以在
on
子句上使用
FIND_IN_SET
关闭
内部联接。
一个问题是连接永远不会使用索引

查询

SELECT
   all columns you need
 , GROUP_CONCAT(Plan.Plan_Name ORDER BY Plan.planid) AS Planname
FROM
  Plan
WHERE
  FIND_IN_SET(Plan.plan_id,(
    SELECT
      User.Plan
    FROM
      user
    WHERE User.userid = 1
  )
)
GROUP BY
  all columns what are in the select (NOT the GROUP_CONCAT function)
SELECT 
   all columns you need
 , GROUP_CONCAT(Plan.Plan_Name ORDER BY Plan.planid) AS Planname
FROM 
 User 
INNER JOIN 
 Plan
ON
 FIND_IN_SET(Plan.id, User.Plan)
WHERE 
 User.id = 1
GROUP BY
 all columns what are in the select (NOT the GROUP_CONCAT function)

正如我在评论中所说,您应该规范化表结构,并添加表
User\u Plan
what保存表
User
Plan
之间的关系

“由于计划表中的计划id是整数,并且用户可以保存许多计划,因此它以逗号分隔的形式存储为varchar,因此当我尝试使用条件时,它不起作用。“如果这是一个新项目,您应该停止逗号分隔值的疯狂行为,规范表结构,并添加保存关系的表
User\u Plan
。请阅读我对这个问题的回答:
SELECT 
   all columns you need
 , GROUP_CONCAT(Plan.Plan_Name ORDER BY Plan.planid) AS Planname
FROM 
 User 
INNER JOIN 
 Plan
ON
 FIND_IN_SET(Plan.id, User.Plan)
WHERE 
 User.id = 1
GROUP BY
 all columns what are in the select (NOT the GROUP_CONCAT function)