mysql数据库中有两个表,如下所示:
用户:
userid |userid | Username | Plan(VARCHAR) | Status |
-----------+------------+--------------+---------------+---------+
1 | 1 | John | 1,2,3 |1 |
2 | 2 | Cynthia | 1,2 |1 |
3 | 3 | Charles | 2,3,4 |1 |
计划:(planid是主键)
planid(INT) | Plan_Name | Cost | status |
-------------+----------------+----------+--------------+
1 | Tamil Pack | 100 | ACTIVE |
2 | English Pack | 100 | ACTIVE |
3 | SportsPack | 100 | ACTIVE |
4 | KidsPack | 100 | ACTIVE |
输出
id |userid | Username | Plan | Planname |
---+-------+----------+------------+-------------------------------------+
1 | 1 | John | 1,2,3 |Tamil Pack,English Pack,SportsPack |
2 | 2 | Cynthia | 1,2 |Tamil Pack,English Pack |
3 | 3 | Charles | 2,3,4 |English Pack,Sportspack, Kidspack |
由于计划表中的计划id是整数,并且用户可以持有许多计划,因此它以逗号分隔的形式存储为varchar,因此当我在条件中尝试时,它不起作用。
SELECT * FROM plan WHERE find_in_set(plan_id,(select user.planid from user where user.userid=1))
这使我从计划表中得到3行,但我希望得到如上所述的所需输出。
怎么做。?需要帮忙吗
1条答案
按热度按时间iezvtpos1#
重写你的查询应该做什么如下。。
查询
你也可以使用
FIND_IN_SET
上ON
a条款INNER JOIN
. 一个问题是连接永远不会使用索引。查询
正如我在评论中所说的,您应该规范化表结构并添加表
User_Plan
什么是表之间的关系User
以及Plan
.