gpt4 book ai didi

mysql - 显示有可用书籍的最早预订

转载 作者:行者123 更新时间:2023-11-30 23:32:36 24 4
gpt4 key购买 nike

我有三个表:贷款、预订和书籍。 books 表具有“noOfCopies”属性,该书的外借和预订总数不能超过该数字。

预订表有一个“时间戳”列,它只是进行预订的时间戳。这个想法是,当还书时,最早预订的人下一个得到这本书。

以下是我需要帮助的事情:我需要创建一个 SQL View ,该 View 将显示每本书的所有最早预订,但仅显示该书有售的地方。

谁能给我这个的SQL?提前致谢。

这是我已经拥有的 SQL:我认为它显示了所有可用书籍的预订,并且正准备继续弄清楚如何显示最早的 - 但后来我没有找到最早的,然后意识到这无论如何实际上都不起作用:

CREATE VIEW `view_bookLoans` AS
SELECT count(l.`id`) as loanCount, l.`bookISBN`,b.`noOfCopies` FROM
loans l INNER JOIN books b
ON l.`bookISBN` = b.`ISBN`
GROUP BY l.`bookISBN`;

CREATE VIEW `view_reservationList` AS
SELECT
r.`timestamp`,
b.`title` as `bookTitle`,
r.`readerID`,
bl.`loanCount`
FROM
`reservations` r INNER JOIN `books` b
ON r.`bookISBN` = b.`ISBN`
LEFT JOIN
view_bookLoans bl
ON bl.`bookISBN` = b.`ISBN`
WHERE
(b.`noOfCopies` - bl.`loanCount`) > 0;

最佳答案

除了我在关于如何排除已填写的预订或已归还的贷款的问题中提出的评论之外......这应该为您完成。

我会首先查看人们预订的那些书。为什么要查询没有人对它们感兴趣的完整书籍列表……然后,扩展您的标准。内部查询直接从预订列表中的书籍开始。这是 LEFT JOINED 到贷款表(以防没有剩余的贷款)。我正在为每本书提取最短的预订时间戳,并获取按 ISBN 分组的外借图书条目的总数。

根据这个结果,我立即重新加入预订,根据最早的 ISBN 和时间戳进行匹配,以获得 WHO 想要的。

现在是结局...加入(不是 LEFT JOIN)到 ISBN 和您的限定符上的书籍表,可用的副本数量...减去已借出的数量 > 0。

显然,您可以根据需要添加 order by 子句。

确保您在 (bookISBN, timestamp) 的预订表上有索引以优化查询。此外,贷款表也应该有一个关于 ISBN 的索引。

SELECT
B.Title,
R2.readerID,
R2.timeStamp,
Wanted.AlreadyLoandedOut,
B.noOfCopies - Wanted.AlreadyLoanedOut as ShouldBeAvailable
FROM
( select
R.bookISBN,
MIN( R.timeStamp ) EarliestReservation,
COALESCE( COUNT( L.ID ), 0 ) as AlreadyLoanedOut
from
reservations R
LEFT JOIN Loans L
ON R.bookISBN = L.bookISBN
group by
R.bookISBN ) as Wanted

JOIN reservations R2
ON Wanted.bookISBN = R2.bookISBN
AND Wanted.EarliestReservation = R2.timeStamp

JOIN books B
ON Wanted.bookISBN = B.ISBN
AND B.noOfCopies - Wanted.AlreadyLoanedOut > 0

关于mysql - 显示有可用书籍的最早预订,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9805018/

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