Нужна помощь с запросом MySQL присоединиться - PullRequest
1 голос
/ 20 декабря 2010

У меня есть таблица BOOK, в которой хранятся книги, и таблица SIMI_BOOK, в которой хранятся значения сходства любых двух книг.Ниже приведены ключи, используемые двумя таблицами.

КНИГА: btitle bid
SIMI_BOOK: подобие bid1 bid2

Мне нужен запрос на объединение, который мог бы получить всю информацию о ДРУГОЙ книге.

Например, когда пользователь посещает определенную страницу книги (bookA), он может получить все книги в SIMI_BOOK с помощью bid1 = bookA или bid2 = bookA, а затем присоединиться к bid2 или bid1 с BOOK соответственно, чтобы получитьинформация о ДРУГОЙ книге.

Есть идеи, как этого добиться?
Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 20 декабря 2010

Вы можете попробовать что-то похожее на:

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)
1 голос
/ 20 декабря 2010

Как насчет:

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 = ?

Только один из двух запросов вернет значение - если у вас нет строк с обоими (Bid1 = X, Bid2 = Y) и (Bid1 = Y, Bid2 = X) в таблице Simi_Book.'?'заполнитель - это значение идентификатора книги, который у вас есть;одно и то же значение должно быть указано дважды.

0 голосов
/ 20 декабря 2010

Вам понадобятся LEFT JOIN и AS операторы.

Сделайте следующее.

  1. получите все книги в SIMI_BOOK
  2. сделать левое соединение для ставки1
  3. сделать еще одно левое соединение для ставки2

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...