2009-09-27 90 views
-1

我得到以下结果的select语句:SQL数据库的问题

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 
+0

条形码和ISBN之间是否存在关联? – JohnFx 2009-09-27 18:56:03

+0

抱歉isbn应该是条形码 – user179780 2009-09-27 18:59:31

回答

1

我认为您正在寻求一种方法来检查最近返回的书籍是否被搁置以保存其他客户,对吗?

这本书实际上应该有一个独特的条码,每本图书的实体副本,以及一本书的ISBN。

保留将由国际标准书号放置。 当一本书被签入时,输入该复制条形码,然后取出其ISBN编号,看看是否有其他顾客正在等待它。 如果是这样,请将该副本的状态设置为“保留”,创建一个关联的图书馆以保存记录关系。 否则,这本书的状态设置为检查。

假设有一个表“复制”是有独特的条形码每个物理拷贝的纪录,并涉及到一个名为“书” 表有一本书的信息比如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); 
0

这不是一个相当良好的数据库设计,如果你问这种问题。首先,您应该将其转换为数据库third normal form。 然后它将看起来像三个表:书籍(name, barcode, available_count),users(user_id, name)和关系表users_to_books(user_id, book_barcode, state),其中状态可以是具有值“on hold”和“on hands”的值的菜单。 之后,你可以做所有类型的东西与计数和检查。

+0

您好,我有更多的桌子..我没有解释清楚。我会打字。 – user179780 2009-09-27 19:12:19

0

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

该ID使其具有独特性。