我如何在 MySql 中制作这种 Select?
How I make this kind of Select in MySql?
我有一个 table 它看起来像这样
mysql> select * from match_info;
+---------------+---------+------------+-------------+-----------+
| match_info_id | user_id | body_types | hair_colors | ethnicity |
+---------------+---------+------------+-------------+-----------+
| 1 | 1 | 1,5,9,13 | 1,5,9,13 | 2,6,10 |
| 2 | 2 | 1,5,9,13 | 5 | 1,5,9 |
+---------------+---------+------------+-------------+-----------+
我对 body_types
、hair_colors
和 ethnicity
使用了查找 tables,每个 [=] 中的 id
和 name
列41=]。
使用上面我需要 select 特定用户的所有值。像这样。
来自 body_type table。
体型:Skinny, Muscular, Large, Ripped
头发颜色:Blonde, Dark Brown, Strawberry Blonde, Dark Blonde
等....
任何人都可以告诉我如何进行 select 查询以获得上述结果。
希望有人能帮助我。
谢谢。
您可以连接表并将 find_in_set
函数放在 on 子句中。
试试这个:
select t.match_info_id, t.user_id,
group_concat(distinct a.name) as body_types,
group_concat(distinct b.name) as hair_colors,
group_concat(distinct c.name) as ethnicity
from match_info as t
inner join body_type as a on find_in_set(a.id,t.body_types)
inner join hair_color as b on find_in_set(b.id,t.hair_colors)
inner join ethnicity as c on find_in_set(c.id,t.ethnicity)
group by t.match_info_id, t.user_id
请注意,您可以根据需要使用 left join
而不是 inner join
。
我有一个 table 它看起来像这样
mysql> select * from match_info;
+---------------+---------+------------+-------------+-----------+
| match_info_id | user_id | body_types | hair_colors | ethnicity |
+---------------+---------+------------+-------------+-----------+
| 1 | 1 | 1,5,9,13 | 1,5,9,13 | 2,6,10 |
| 2 | 2 | 1,5,9,13 | 5 | 1,5,9 |
+---------------+---------+------------+-------------+-----------+
我对 body_types
、hair_colors
和 ethnicity
使用了查找 tables,每个 [=] 中的 id
和 name
列41=]。
使用上面我需要 select 特定用户的所有值。像这样。
来自 body_type table。
体型:Skinny, Muscular, Large, Ripped
头发颜色:Blonde, Dark Brown, Strawberry Blonde, Dark Blonde
等....
任何人都可以告诉我如何进行 select 查询以获得上述结果。
希望有人能帮助我。
谢谢。
您可以连接表并将 find_in_set
函数放在 on 子句中。
试试这个:
select t.match_info_id, t.user_id,
group_concat(distinct a.name) as body_types,
group_concat(distinct b.name) as hair_colors,
group_concat(distinct c.name) as ethnicity
from match_info as t
inner join body_type as a on find_in_set(a.id,t.body_types)
inner join hair_color as b on find_in_set(b.id,t.hair_colors)
inner join ethnicity as c on find_in_set(c.id,t.ethnicity)
group by t.match_info_id, t.user_id
请注意,您可以根据需要使用 left join
而不是 inner join
。