gpt4 book ai didi

mySQL 查找可用书籍并借出

转载 作者:行者123 更新时间:2023-11-29 19:28:08 24 4
gpt4 key购买 nike

我创建了一个图书馆系统,我正在尝试设置一个程序,允许您输入 isbn 和学生编号,然后检查数据库以查看该书是否可用,如果有,则预订它。如果没有,则给出错误消息。

我的表格如下:

  • 书籍 - pk_isbn、作者、书名
  • 复制 - pk_code、持续时间、fk_isbn
  • 贷款 - fk_code、fk_no、pk_taken、到期日、归还日期
  • 学生 - pk_no、姓名、学校、允许预订

这是我目前拥有的代码*我猜有些只是伪代码,因为它目前根本不起作用。

DELIMITER $$
CREATE PROCEDURE issue_loan (IN book_isbn CHAR(17), IN stu_no INT)

BEGIN

DECLARE availablebooks INT;
DECLARE allowedtobook BIT;

SET availablebooks = (SELECT DISTINCT
c.isbn
FROM
loan l
INNER JOIN
student s ON l.no = s.no
INNER JOIN
copy c ON l.code = c.code
WHERE
return_date IS NOT NULL);

IF(availablebooks = book_isbn) AND s.embargo = 0 THEN
INSERT INTO loan VALUES
(code, stu_no, CURDATE(), CURDATE()+c.duration,'');
ELSE
SIGNAL SQLSTATE '450000' SET MESSAGE_TEXT ='no Books Available';
END IF;

END$$

return_date IS NOT NULL 的部分应该是正确的,因为它找到了尚未归还的任何书籍。这意味着他们目前已被预订一空。

最佳答案

不能将变量设置为查询结果集,变量只能保存一个值。您只需将 book_isbns.embargo = 0 的比较添加到查询中即可。

SET @book_available = (SELECT COUNT(*)
FROM loan l
INNER JOIN student s ON l.no = s.no
INNER JOIN copy c ON l.code = c.code
WHERE c.fk_isbn = book_isbn AND s.embargo = 0 AND l.return_date IS NULL);

IF @book_available
THEN
INSERT INTO loan (fk_code, fk_no, pk_taken, due, return_date)
VALUES (code, stu_no, CURDATE(), CURDATE()+c.duration,'');
ELSE SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT ='no Books Available';
END IF

关于mySQL 查找可用书籍并借出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41992080/

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