gpt4 book ai didi

MYSQL join逗号分隔查询

转载 作者:行者123 更新时间:2023-12-01 00:24:32 25 4
gpt4 key购买 nike

我四处寻找,一无所获。

我有 2 个表,并且不必为显示我需要以某种方式加入它们的每个帖子查询数据库。

我想从 pics 表中获取 url,它具有 posts 表中 pics 字段的 id。现在我的问题来了:pics 字段是逗号分隔的“列表”(4,1 或 32,4,32,2),因为每个帖子通常都有不止一张图片。

表格设置:

帖子:

 id | header | text | pics
| 1 xxx xxx 3,1
| 2 xxx xxx 2,10,4
| 3 xxx xxx 16,17,18,19
| 4 xxx xxx 11,12,13

图片:

id | name | url
| 1 xxx xxx
| 2 xxx xxx
| 3 xxx xxx
| 4 xxx xxx
| 10 xxx xxx
| 11 xxx xxx
| 12 xxx xxx
| 13 xxx xxx
| 16 xxx xxx
| 17 xxx xxx
| 18 xxx xxx

最佳答案

强烈建议您修复当前的数据库结构,这样您就不会将数据存储在以逗号分隔的列表中。您的表格结构应类似于以下内容:

CREATE TABLE posts
(`id` int, `header` varchar(3), `text` varchar(3))
;

CREATE TABLE pics
(`id` int, `name` varchar(3), `url` varchar(3))
;

CREATE TABLE post_pics
(`post_id` int, `pic_id` int)
;

然后你可以很容易地通过连接表得到一个结果:

select p.id,
p.header,
p.text,
c.name,
c.url
from posts p
inner join post_pics pp
on p.id = pp.post_id
inner join pics c
on pp.pic_id = c.id;

参见 SQL Fiddle with demo .

如果您不能更改您的表,那么您应该能够使用FIND_IN_SET 进行查询:

select p.id, p.header, p.text, p.pics,
c.id c_id, c.name, c.url
from posts p
inner join pics c
on find_in_set(c.id, p.pics)

参见 SQL Fiddle with Demo .

编辑,如果您希望数据显示为逗号分隔的列表,那么您可以使用GROUP_CONCAT

查询 1:

select p.id,
p.header,
p.text,
group_concat(c.name separator ', ') name,
group_concat(c.url separator ', ') url
from posts p
inner join post_pics pp
on p.id = pp.post_id
inner join pics c
on pp.pic_id = c.id
group by p.id, p.header, p.text;

参见 SQL Fiddle with Demo

查询 2:

select p.id, p.header, p.text, p.pics,
group_concat(c.name separator ', ') name,
group_concat(c.url separator ', ') url
from posts p
inner join pics c
on find_in_set(c.id, p.pics)
group by p.id, p.header, p.text, p.pics;

参见 SQL Fiddle with Demo

关于MYSQL join逗号分隔查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16923471/

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