SQL数据库问题

时间:2009-09-27 18:51:03

标签: php sql

我有一个select语句显示以下结果:

On_loan barcode
Y       12345
Y       12345
N       12345
N       12344
Y       12344

一本书的每个条形码都可以有多个副本。用户可以暂停一本书。例如,用户'1'已预订了书籍12345和12344.上述结果表明:两本书条码12344-一本可用,另一本不可用。我希望能够在PHP中显示两个区域,顶部显示准备取出的书籍(已暂停),另一个显示已暂停的不可用书籍。从我的选择查询我现在想要我的选择检查以查看每个条形码12345和12344是否已退回一本书。如果有,我将使用hold_date查看它是否是特定图书的最早保留。

我理解on_loan告诉我一本书是否已经退回,但是我怎样才能在每本书中使用on_loan中的'N'。我相信明显不会奏效。

我该怎么做呢。

我的保持表 有以下字段:

user
isbn
hold_date 

3 个答案:

答案 0 :(得分:1)

我认为您正在寻找一种方法来检查最近退回的图书是否暂停给另一位客户,对吗?

这本书实际上应该在图书馆的每本书的物理副本上都有一个独特的条形码,以及一般书籍的ISBN。

持有将由ISBN放置。 签入书籍后,输入复制条形码,然后提取其ISBN号,看看是否有其他客户在等待它。 如果是这样,请将该副本的状态设置为“保留”,创建相关的库书以保持记录关系。 否则,将书籍状态设置为已签入。

假设有一个表'副本',其中包含每个具有唯一条形码的物理副本的记录,并且与一个名为'book'的表相关 有关于ISBN和作者等书籍的信息,以及一个名为“hold”的表格,其中包含持有信息的ISBN(或更好,book.id)

以下是签入并保留的所有副本。

select * from copy left join book on book.id = copy.book_id where copy.status_id = get_book_status('in') and book.isbn in (select isbn from hold);

答案 1 :(得分:0)

如果你问这类问题,这不是一个很好的数据库设计。 首先,您应该将其转换为third normal form数据库。 然后它将看起来像三个表:图书(name, barcode, available_count)users(user_id, name)和关系表users_to_books(user_id, book_barcode, state),其中州可以是值为“on hold”和“{{1 }}”。 之后,您可以通过计数和检查来完成所有类型的工作。

答案 2 :(得分:0)

也许你应该有一个带有ID,条形码,条形码表链接的bookTitle表,然后你可以做一个查询来返回bookTitle的所有副本,并使用查询来返回借来的条形码而不是。

ID使其独一无二。