gpt4 book ai didi

mysql - 我可以在结果表中显示一对多结果吗?

转载 作者:行者123 更新时间:2023-11-29 00:40:19 25 4
gpt4 key购买 nike

我有一个person 表和一个language 表。每个人最多可以说 4 种语言。我的客户想要搜索会说话的人,例如 西类牙语

我的问题是结果表目前不会有名为 Language 的列,因为它们会说不止一种。我可以只显示第一个,但隐藏他们说的其他语言会产生误导。

该表可以为每种语言设置一列,如果没有所有 4 种语言,则填写 NULL,即:

Language 1
Language 2
Language 3
Language 4

但这看起来很马虎。

我考虑过使用逗号分隔列表将所有语言列在一个列中,但这对于按字母顺序对列进行排序很有用。

目前,我不得不告诉我的客户,结果表只能显示该人拥有其中之一的列(1 到 1),即 namelocation,母语等。只有当客户端点击那个人时,它才能显示他们所有的语言。

有谁知道是否有解决此问题的通用方法?希望这是有道理的

我确实有一个关联表。问题是我的搜索将返回

joe bloggs,哥谭市,西类牙语

然后

joe bloggs,哥谭市,法语

在下一行 - 但是同一个人在表格中列出了两次。当我将它限制为每个名称一个条目时,我只会得到“joe bloggs,哥谭市,西类牙语”。现在我不知道他也会说法语。这样是不是更清楚了?

最佳答案

您应该有一个包含两个字段的连接表:人员和语言。每个人每种语言应该有一行,所以如果一个人说四种语言,那么这个用户就会有四行。

此表的主键将包含这两个字段。

然后要获得讲西类牙语的人的列表,您需要这样的查询

select people.name
from people inner join p2l
on people.id = p2l.person
inner join languages
on p2l.language = languages.id
where languages.name = 'Spanish'

以及所有说某种语言的人的列表

select people.name, languages.name
from people inner join p2l
on people.id = p2l.person
inner join languages
on p2l.language = languages.id

现在是所有人的列表,无论他们是否会说某种语言

select people.name, languages.name
from people left join p2l
on people.id = p2l.person
inner join languages
on p2l.language = languages.id

关于mysql - 我可以在结果表中显示一对多结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12550970/

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