Mysql-将int字段与另一个表中的逗号分隔字段进行比较
MySQL数据库中有两个表,如下所示: 用户: 计划:(计划ID是主键) 输出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行,但我希望得到如上所述的所需输出 怎么做。?请提供任何帮助
由于计划表中的计划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)