我有三個表格,作者,書籍和借閱。每位作者有多本書。一本書可能會或不會出現在借用表中。下面是模式:MYSQL/PHP:可以加入一對多的領域?
作者
id|authornamename
書籍
id|bookname|authorid
借用
id|bookid|borrowerid|onloan //onloan is a boolean
每當一本書是借來的,它出現在借用表。但是,只有一些書出現在借用表中。如果曾經借過,他們可以獲得TRUE
或FALSE
。
以下查詢每個返回一個逗號delimitied bookids和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";
我怎麼也弄,一個列表的書是否是借來的每本書(因爲在借用表中沒有每本書的條目?我希望onloan的列表具有與書籍相同的條目數量,所以我可以告訴某本書在特定時間是否在瀏覽。如果它從未被借過,我想有一個0的價值 - 即與借來的價值相同,但是Onloan是FALSE
。
所以如果bookids列表是一樣的東西:
"32,77,84"
的onloan名單應該是這樣的
"0,1,1"
1意味着它是onloan(出)和0意味着它是不是onloan (在圖書館)。
我需要onloan列表具有與bookids列表相同數量的元素,所以to和to之間存在1對應的關係,我可以使用索引重新組合書籍數組。
感謝您的任何建議。
這看起來是正確的,但由於某種原因,我得到未知的列bo.onloan在字段列表中的錯誤 – user6631314
你介意再校對你的答案。我不斷收到一個SQL錯誤。別名是否應該以bookids,booknames結尾? )在FROM子句結束後,是否有任何意義?這應該是's'嗎?我嘗試了很多方法,但不斷收到錯誤,最近接近(onloan ...在第5行 – user6631314
好的,我認爲它有一些變化,在書名後面應該有一個逗號並且在選擇之後子句應該是b,而不是t.TX! – user6631314