【发布时间】:2017-12-11 15:16:04
【问题描述】:
我有三张桌子,作者、书籍和借来的。每个作者都有多本书。一本书可能会或不会出现在借来的桌子上。这是架构:
作者
id|authornamename
书籍
id|bookname|authorid
借来的
id|bookid|borrowerid|onloan //onloan is a boolean
每当一本书被借阅时,它都会出现在借阅表中。但是,借来的表中只出现了一些书籍。如果曾经借过,它们的贷款价值可以达到TRUE 或FALSE。
以下查询返回一个作者列表,其中每个作者都有一个以逗号分隔的 bookid 和 booknames 列表:
SELECT
a.*,a.id as `authorid`, bookids,booknames
from authors `a`
LEFT JOIN (
SELECT group_concat(id ORDER BY id ASC) as `bookids`,
group_concat(bookname ORDER BY id ASC) as `booknames`
FROM books
GROUP BY authorid
) b ON b.authorid = a.id
GROUP BY a.id";
如果借用表中没有每本书的条目,我怎么能得到每本书是否被借的列表(外借字段)?我希望外借列表具有与书籍相同数量的条目,因此我可以判断一本书是否在给定时间外借。如果它从未被借过,我希望它的值为 0——即与借过但 Onloan 为 FALSE 的值相同。
所以如果 bookids 列表是这样的:
"32,77,84"
外借名单应该是这样的
"0,1,1"
其中 1 表示它是外借(out),0 表示它不是外借(in library)。
我需要 onloan 列表具有与 bookids 列表相同数量的元素,因此 to 之间存在 1 对 1 的对应关系,并且我可以最后使用索引重新组装 books 数组。
感谢您的任何建议。
【问题讨论】: