自從我與MySQL一起工作已經有一段時間了,我無法自己弄清楚這一點:我有三個表格,一個用於users
,一個用於books
另一個用於favourites
。我正在開發一個搜索系統,用戶可以根據其標題,發佈年份或流派來搜索圖書。MySQL - 根據關係表的值在最終輸出中添加額外的列
對books
和users
表沒有什麼特別的想法,所以我認爲發佈這兩個表的模式都沒有關係。 favourites
表是由book_id和user_id兩個列組成的兩個foreign key
列的關係表。
我的目標是運行一個基於搜索查詢獲取所有圖書的查詢,但也會查找favourites
表,如果用戶已將特定圖書添加到他/她的收藏夾中,則會在最後添加一列輸出,fe isFavorable: 0
,否則:isFavorable: 1
。最後的結果將是這個樣子(在JSON
格式):
{
data: [
{
// non favorite
"id": 1,
"title": "Test Book 1",
"genre": "Adventure",
"year": 1994,
"isFavorite": 0 // if cannot be found in the favourites table
},
// favorite
{
"id": 2,
"title": "Test Book 2",
"genre": "Novel"
"year": 2012,
"isFavorite": 1 // if can be found in the favorites table
}
]
}
到目前爲止,我只能夠輸出所有標記爲收藏的結果,而不是所有的書籍和想不通如何檢查它是否已被標記爲收藏並輸出對應值。
這將打印所有的書用戶#1喜歡
SELECT * FROM books b
LEFT JOIN favourites f ON f.book_id = b.id
LEFT JOIN users u ON u.id = f.user_id
WHERE u.id = 1
'LEFT JOIN'應該是'RIGHT JOIN'? – kittykittybangbang