gpt4 book ai didi

mysql - 如何连接 MYSQL 中查找表中的字符串值

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

我有三个表:upload、tag 和 upload_tag。 Upload 保存文件上传的详细信息,tag 保存标签名称,upload_tag 是一个查找表,将上传 id 与标签 id 相匹配,即:

+--------------------------------------------------------+
| upload |
+--------------------------------------------------------+
|id |name |
+-----------+--------------------------------------------+
|1 |file_1.jpg |
+-----------+--------------------------------------------+
|2 |file_2.doc |
+-----------+--------------------------------------------+

+--------------------------------------------------------+
|tag |
+--------------------------------------------------------+
|id |name |
+-----------+--------------------------------------------+
|1 |a_tag |
+-----------+--------------------------------------------+
|2 |b_tag |
+-----------+--------------------------------------------+
|3 |c_tag |
+-----------+--------------------------------------------+

+--------------------------------------------------------+
|upload_tag |
+-----------+--------------------------------------------+
|upload_id |tag_id |
+-----------+--------------------------------------------+
|1 |1 |
+-----------+--------------------------------------------+
|1 |2 |
+-----------+--------------------------------------------+
|2 |3 |
+-----------+--------------------------------------------+
|2 |2 |
+-----------+--------------------------------------------+

我需要使用标签字符串从数据库中提取上传内容,但全部在一行中,因此结果如下:

+----------------------------------------------------+
|filename |tags |
+--------------+-------------------------------------+
|file_1.jpg |a_tag; b_tag |
+--------------+-------------------------------------+
|file_2.doc |c_tag; b_tag |
+--------------+-------------------------------------+

目前我认为最好的方法是创建一个 MySQL 函数,它接受上传 ID 并返回格式化的标签字符串。我在这里正确吗,还是有更好的方法来实现这一目标?

最佳答案

您应该使用 LEFT JOIN 子句和 GROUP_CONCAT() 函数。

SELECT          u.name AS filename,
GROUP_CONCAT(t.name SEPARATOR '; ') AS tags
FROM upload u
LEFT JOIN upload_tags ut
ON u.id = ut.upload_id
LEFT JOIN tag t
ON t.id = ut.tag_id
GROUP BY u.id;

GROUP_CONCAT 是一个聚合函数,这意味着它适用于多行(组织为组),而不是适用于多列的 CONCAT

关于mysql - 如何连接 MYSQL 中查找表中的字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11242994/

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