2010-12-20 116 views
1

我有一個存儲書籍的BOOK表,以及一個存儲任何兩本書的相似度值的SIMI_BOOK表。以下是兩個表格使用的關鍵字。需要關於mysql連接查詢的幫助

書:投標BTITLE
SIMI_BOOK:標段標段相似

我需要連接查詢,可以獲取所有有關其他書的信息。例如,當用戶訪問特定的書籍頁面(bookA)時,它可以通過bid1 = bookA或bid2 = bookA獲取SIMI_BOOK中的所有書籍,然後分別將bid2或bid1與BOOK連接以獲取關於OTHER書。

關於如何實現這一點的任何想法?
預先感謝您。

回答

1

您可以嘗試類似的東西:

SELECT * (or what you need) 
FROM SIMI_BOOK JOIN BOOK ON (BOOK.bid = SIMI_BOOK.bid1) 
WHERE SIMI_BOOK.bid2 = nnn (your primary book id) 
UNION 
SELECT * (or what you need) 
FROM SIMI_BOOK JOIN BOOK ON (BOOK.bid = SIMI_BOOK.bid2) 
WHERE SIMI_BOOK.bid1 = nnn (your primary book id) 
+0

非常感謝您的洞察!聯盟,就是這樣!順便說一句,是否可以在UNIONed之後向此查詢添加ORDER BY&LIMIT? – 2010-12-20 07:48:32

+1

是的,他們應該去所有的UNIONs:檢查http://dev.mysql.com/doc/refman/5.0/en/union.html並搜索LIMIT – Don 2010-12-20 07:53:11

+0

啊!添加額外的()s是多麼愚蠢。非常感謝你! – 2010-12-20 07:56:17

0

您將需要LEFT JOINAS聲明。

請執行以下操作。

  1. 獲取所有書籍SIMI_BOOK
  2. 做左連接的標段
  3. 另做左連接的標段

希望這有助於。

+0

不需要外連接。 – 2010-12-20 07:47:17

1

什麼:

SELECT b2.* 
    FROM Book B2 
    JOIN Simi_Book SB ON SB.Bid2 = B2.Bid AND SB.Bid1 = ? 
UNION 
SELECT b1.* 
    FROM Book B1 
    JOIN Simi_Book SB ON SB.Bid1 = B1.Bid AND SB.Bid2 = ? 

兩個查詢的只有一個將返回一個值 - 除非你有兩行(標段1 = X,出價2 = Y)和(出價1 = Y,出價2 = X)在Simi_Book表中。 '?'佔位符是您擁有的圖書ID的值;應該提供兩次相同的值。

+0

非常感謝您的洞察! – 2010-12-20 08:01:36