gpt4 book ai didi

mysql - 在单个查询中选择许多项目,这些项目本身有很多项目?

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

我有一个代表图书收藏的数据库。它看起来像这样:

书籍表

id    |    title            |    year    |    author_id
--------------------------------------------------------
1 How to Read 1985 7
2 A Dream of Spring 2041 14
3 Tour Guide 2010 40

标签表

id    |    tagname
-------------------
1 nonfiction
2 fiction
3 poetry
4 sci-fi
5 magical realism
6 detective

books_tags_links 表

book    |    tag
------------------
8 4
10 1
10 4
10 5
8 2

书籍和标签之间存在一对多的关系:一本书可以有多个标签,比如“小说、侦探、科幻”。

我想知道的是:我是否可以在单个查询中选择所有书籍,与每本书关联的所有标签?我不知道结果会是什么样子——我想是一个锯齿状的数组,每本书都有不同数量的标签?

我的最终目标是输出一个 HTML 表,其中每一行都是一本书,tr 元素为给书的每个标签提供一个 data-tag 属性,这样我就可以使用 JavaScript 来隐藏或显示带有某种标签组合的书籍。到目前为止,我只能想象如何通过为列表中的每本书发出一个单独的 select tags 查询来做到这一点,但这可能意味着发出数千个数据库请求,我想知道是否有更聪明的方法。

我目前正在使用 SQLite,但如果有专用于 Postgres 或 MySQL 的解决方案,我仍然有兴趣了解它。

最佳答案

在 MySQL 中,group_concat() 可能会执行您想要的操作:

select b.*,
group_concat(t.tagname)
from books b join
book_tags bt
on b.id = bt.book join
tags t
on bt.tag = t.id
group by b.id;

这会将标签放在一个逗号分隔的列表中,这可能是一种适合您的目的的格式。您可以使用 SEPARATOR 关键字更改分隔符。

关于mysql - 在单个查询中选择许多项目,这些项目本身有很多项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30608899/

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