gpt4 book ai didi

mysql - 有限制的 GROUP_CONCAT

转载 作者:行者123 更新时间:2023-11-29 15:35:54 25 4
gpt4 key购买 nike

我有一个表,其中 player-s 与 skill-s 具有多对多关系

目标是通过单个查询列出玩家及其“前 3 项技能”。

fiddle

create table player(
id int primary key
);

create table skill(
id int primary key,
title varchar(100)
);

create table player_skills (
id int primary key,
player_id int,
skill_id int,
value int
);

查询:

SELECT 
p.id,
group_concat(s.title SEPARATOR ', ') as skills

FROM player p
LEFT JOIN player_skills ps ON ps.player_id = p.id
LEFT JOIN skill s ON s.id = ps.skill_id

WHERE ps.value > 2
-- skills limit 3 some how ...
group by p.id
order by s.id


-- expected result
-- player_ID, skills
-- 1 , 'one'
-- 2 , 'one'
-- 3 , 'two, three, four'

正如您在 fiddle 中看到的,查询结果仅缺少 3 个技能的限制。
我尝试了子查询的几种变体..连接等,但没有效果。

最佳答案

一种有点古怪的方法是对 GROUP_CONCAT 的结果进行后处理:

substring_index(group_concat(s.title SEPARATOR ','), ',', 3) as skills

当然,这假设您的技能名称不包含逗号并且其数量相当小。

fiddle

一个feature request遗憾的是,GROUP_CONCAT 支持显式 LIMIT 子句的问题仍未得到解决。

更新:作为用户 Strawberry指出,表 player_skills 应该将元组 (player_id, Skill_id) 作为其主键,否则架构允许将同一技能多次分配给玩家,在这种情况下 group_concat 将无法按预期工作。

关于mysql - 有限制的 GROUP_CONCAT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58237125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com