У меня есть две таблицы в базе данных 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(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 |
Так как идентификатор плана в таблице Plan является целым числом, и пользователь может хранить много планов, его хранится как запятая, разделенная как varchar, поэтому, когда я пытаюсь с условием IN, это не работает.
SELECT * FROM plan WHERE find_in_set(plan_id,(select user.planid from user where user.userid=1))
Это даст мне 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)
Вы также можете использовать FIND_IN_SET
в предложении ON
с INNER JOIN
. Одна из проблем заключается в том, что объединение никогда не будет использовать индексы.
запрос
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_Plan
содержатся отношения между таблицей User
и Plan
.
User_Plan
и нормализовать структуру таблиц и добавить таблицуUser_Plan
которая содержит отношения.