gpt4 book ai didi

php - 从多到多将多行分组为一行

转载 作者:行者123 更新时间:2023-11-28 23:35:50 24 4
gpt4 key购买 nike

所以我刚开始接触 SQL 编程,并着手用两个表和一个数据透视表建立多对多关系。我将通过 API 发送此信息,如果能够在我的前端以一种简单的方式循环访问数据会很棒。

表格如下所示:

故事模板

id、标题、正文、作者

空白

id, title, description

blanks_story_template(透视)

id, sid, bid, position

我已经通过使用此查询设法获取了我需要的信息:

SELECT 
st.title, st.body, st.author,
b.*,
bst.position
FROM story_template AS st
INNER JOIN blanks_story_template AS bst ON st.id = bst.sid
INNER JOIN blanks AS b ON bst.bid = b.id
ORDER BY bst.position

结果如下:

Result after running query

所以我想知道的是,是否可以将多行合并为一行?因此,例如上面的结果如下所示:

st.id, title, body, author, b.id, title, description, position
--------------------------------------------------------------
1 title body author 1, title, description, position
2, title, description, position
3, title, description, position
2 title body author 1, title, description, position
2, title, description, position
3, title, description, position

我研究了 GROUP_CONCAT(),如果所有列都有值,那会起作用,从那时起我就可以将它们拆分成一个数组。但这并没有真正帮助我,因为如果 blank.description 在一行中为 NULL,那么我将丢失属于哪个 blank.id..

这在查询中是否可行,还是我必须在使用 API 发送之前解析它?

如果有任何模糊之处,我深表歉意,如果您需要我澄清任何事情,我很乐意这样做。

最佳答案

您可以在 MySQL 中使用用户变量来判断某行是否与前一行属于同一 story_template。您需要更改 ORDER BY,以便同一 story_template 的行在一起。

SELECT IF(id = @last_st, '', id) AS id,
IF(id = @last_st, '', title) as title,
IF(id = @last_st, '', body) as body,
IF(id = @last_st, '', author) AS author,
blank_id, blank_title, description, position,
@last_st := id
FROM (
SELECT
st.id, st.title, st.body, st.author,
b.id AS blank_id, b.title AS blank_title, b.description,
bst.position
FROM story_template AS st
INNER JOIN blanks_story_template AS bst ON st.id = bst.sid
INNER JOIN blanks AS b ON bst.bid = b.id
ORDER BY st.id, b.id
) AS x
CROSS JOIN (SELECT @last_id := null) AS y

关于php - 从多到多将多行分组为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35806885/

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