gpt4 book ai didi

php - 获取具有多个子表的条目

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:57 24 4
gpt4 key购买 nike

我有一个数据库,我不知道如何获取图书数据。我将解释我以前是如何做的以及我现在打算如何做。

为简单起见,我将以“书籍”为例,因为它最容易显示关系。以前,我有这个结构,我发现它在数据库上很重:

Books:
book_id
title
author_name
genre_name

查询单本书、所有书、按作者的书和按流派的书很容易。这里的问题是当我需要获取作者或流派列表时。在将它们交给浏览器之前,我必须选择所有 书籍,检测可能的重复项、相同项、唯一项等。我已经感觉到处理滞后了。

所以我现在打算做的是:我有 3 个表,一个用于书籍,另一个用于作者,另一个用于流派。

Books:       Authors:      Genre: 
book_id author_id genre_id
title author_name genre_name
author_id
genre_id

这样,我可以通过 author_idgenre_id 标记书籍,并在不影响“按作者获取”和“按类型获取”。此外,我可以通过更改 author_idgenre_id 轻松更改图书作者和/或类型。

但是如果我选择一本书,当正常的 select * from Books where book_id=something 只返回流派和作者的 ID 时,我该怎么做?我该怎么做才能返回作者姓名和流派名称?子查询?一个单独的查询?还是实际上有一个我不知道的单行查询?

最佳答案

你需要使用 INNER JOIN 才能做这样的事情

SELECT b.book_id, b.title, a.author_name, g.genre_name FROM Books 
INNER JOIN Authors a ON b.author_id=a.author_id
INNER JOIN Genre g ON b.genre_id=g.genre_id
WHERE book_id=12

作为替代方案,如果您不想创建单独的表(顺便说一下,这是一个很好的设计),您可以使用 DISTINCT 查询

 SELECT DISTINCT author_name FROM Books;

关于php - 获取具有多个子表的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8685692/

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