我有两个表body_part和video_customized。
表格-> body_part
print(results)
0 Name ... Returns
0 Kent Bazemore ... Targeting mid-January
1 Taurean Prince ... Day-to-day
2 Rondae Hollis-Jefferson ... Day-to-day
3 Dzanan Musa ... Day-to-day
4 Allen Crabbe ... Targeting mid-January
5 Caris LeVert ... Targeting February
6 Marcus Morris ... Day-to-day
7 Kyrie Irving ... Day-to-day
8 Robert Williams ... day-to-day
9 Aron Baynes ... Targeting MLK Day
10 Malik Monk ... Day-to-day
11 Cody Zeller ... Targeting All-Star break
12 Jeremy Lamb ... day-to-day
13 Bobby Portis ... Targeting mid-January
14 Denzel Valentine ... Out for season
15 Matthew Dellavedova ... Day-to-day
16 Ante Zizic ... Day-to-day
17 David Nwaba ... Day-to-day
18 J.R. Smith ... Out indefinitely
19 John Henson ... Out Indefinitely
20 Kevin Love ... Targeting mid-January
21 Will Barton ... week-to-week
22 Jarred Vanderbilt ... Out indefinitely
23 Michael Porter Jr. ... Out indefinitely
24 Isaiah Thomas ... Targeting December
25 Zaza Pachulia ... Day-to-day
26 Ish Smith ... Out Indefinitely
27 Henry Ellenson ... Out indefinitely
28 Damian Jones ... Out Indefinitely
29 DeMarcus Cousins ... Targeting January?
.. ... ... ...
[74 rows x 7 columns]
表格-> 自定义视频
+-----+-----------|
| id | title |
------------------|
| 1 Abs
| 2 Chest
| 3 Neck
------------------
SQL
+-----+-----------|
| id | body_part |
------------------|
| 1 2,1,3 |
------------------|
结果
SELECT vc.body_part ,
GROUP_CONCAT(bp.name ORDER BY vc.body_part)
as body_part_name FROM
`video_customised` `vc`
LEFT JOIN `body_part` as `bp` ON
`FIND_IN_SET`(bp.id, vc.body_part);
预期结果:
+-----+-----------------------|
| body_part | body_part_name |
------------------------------|
| 2,1,3 Abs,Chest,Neck|
------------------------------|
我要GROUP_CONCAT body_part_name,其顺序应与body_part相同。
答案 0 :(得分:4)
您需要修复数据模型。您不应将数字列表存储在单个字段中。为什么?
您应该使用联结/关联表,每个身体部位和每个视频一行。
也就是说,有时候我们会被非常,非常,非常糟糕的设计决策所束缚。在这种情况下,您可以使用find_in_set()
做您想做的事情:
SELECT vc.body_part,
GROUP_CONCAT(bp.name ORDER BY FIND_IN_SET(bp.id, vc.body_part)) as body_part_names
FROM video_customised vc LEFT JOIN
body_part bp
ON FIND_IN_SET(bp.id, vc.body_part);
GROUP BY vc.body_part;