我目前2個表看起來像這樣:Mysql的分割字符串,並選擇與結果
frontend_users:
uid | usergroup | name
1 | 1,2,3 | Michael
2 | 2 | Tobias
3 | 1 | Colin
...
和
usergroups:
uid | title
1 | member
2 | reporter
3 | admin
我試圖拆用戶組,併爲每個編號選擇的用戶組,並將其添加顯示的結果應該看起來像是最好的情況:
uid | name | groups
1 | Michael | member, reporter, admin
2 | Tobias | reporter
3 | Colin | member
最好的結果我f到目前爲止是從這裏: Split String and Do Calculation in MySQL 但我似乎無法從substring_index結果中選擇另一個表。 我當前的查詢看起來是這樣的:
SELECT frontend_users.uid, frontend_users.name
CASE
WHEN frontend_users.usergroup LIKE '%,%,%' THEN
CONCAT((SELECT usergroups.title FROM usergroups, frontend_users WHERE usergroups.uid = SUBSTRING_INDEX(frontend_users.usergroup, ',', 1)),
(SELECT usergroups.title FROM usergroups, frontend_users WHERE usergroups.uid = SUBSTRING_INDEX(SUBSTRING_INDEX(frontend_users.usergroup, ',', 2), ',', -1)),
(SELECT usergroups.title FROM usergroups, frontend_users WHERE usergroups.uid = SUBSTRING_INDEX(SUBSTRING_INDEX(frontend_users.usergroup, ',', 3), ',', -1)))
WHEN frontend_users.usergroup LIKE '%,%' THEN
CONCAT((SELECT usergroups.title FROM usergroups, frontend_users WHERE usergroups.uid = SUBSTRING_INDEX(frontend_users.usergroup, ',', 1)),
(SELECT usergroups.title FROM usergroups, frontend_users WHERE usergroups.uid = SUBSTRING_INDEX(SUBSTRING_INDEX(frontend_users.usergroup, ',', 2), ',', -1))),
ELSE (SELECT usergroups.title FROM usergroups, frontend_users WHERE usergroups.uid = frontend_users.usergroup)
END AS groups
FROM frontend_users, usergroups
我試圖用一個for循環組的數量,但結果更糟。
任何提示我如何使用select查詢與substring_index結果?
壞DB設計檢查,你應該正常化它,不會保存逗號分隔的數據關係屬性。 –
它失敗**第一個正常形式** – Premraj
可悲的是我不能改變這一點,因爲它是預定義的,並在整個cms中使用。 – StifanCral