gpt4 book ai didi

mysql - 使用MYSQL打印多条数据的正确方法是什么?

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

在上一个问题中有人告诉我,如果我想为一个用户存储多种语言,那么最好有一个单独的表将语言和用户映射在一起。这是有道理的,因为它是一个经典的多对多关系,所以这就是我所做的。

我现在的问题是,我可以编写什么查询来连接每个用户的所有语言名称,然后将其显示为表格?

我做了以下(是否正确?):

CREATE TABLE language (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name char(20) NOT NULL UNIQUE)

CREATE TABLE user (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name char(20) NOT NULL UNIQUE)

CREATE TABLE user_language (
id_user INT REFERENCES user(id),
id_lang INT REFERENCES language(id) )

然后我将 3 个测试用户、7 种测试语言和 9 对插入到 user_language 表中。现在我想使用一个 MySQL 查询在用户名旁边打印每个用户使用的语言的串联列表,但我不知道该怎么做。例如,我想看看

User    |   Languages
--------|---------------
Bob | English, French
Alex | Spanish, Portuguese
Ivan | Russian, English, German

有什么想法吗?我走在正确的轨道上吗?

编辑

我知道 JOIN 函数,所以将列表作为一组单独的对打印出来并不是我的意图。我特别想为每个用户连接语言,而无需在脚本中编写循环(在我的例子中是 PHP)。我认为可能有某种方法可以编写子查询并使用 CONCATENATE 函数来帮助我......?我离题了吗?

最佳答案

您需要了解一下为此使用 INNER JOIN。本质上,JOIN 将查看每个字段中的 ID,然后将具有匹配 ID 的条目的数据匹配在一起。

考虑以下 SQL 查询:

SELECT user.*, language.name FROM user
INNER JOIN user_language ON user.id = user_language.id_user
INNER JOIN language ON user_language.id_lang = language.id;

INNER JOIN 的顺序很重要;我们需要做的第一件事是能够引用与用户 ID 相关的语言 ID。第一个 INNER JOIN 将为每个用户提供一个用户可以使用的语言 ID 列表。第二个是将分配给用户的语言 ID 映射到名称。

但是,上面的代码不会以逗号分隔的列表形式返回它们。相反,你会得到这样的东西:

name    |    language
-------------------------
bob | English
bob | Dutch
Sally | English
Sally | Spanish
Sally | German

您必须进行一些后期处理才能将数据放入逗号分隔的列表中。在几乎任何语言中这样做都应该相当简单。

关于mysql - 使用MYSQL打印多条数据的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5480858/

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