MYSQL: Проблема в письменной форме, где предложение в соответствии со сценарием - PullRequest
1 голос
/ 01 июля 2011

У меня есть БД (user_interests), настроенная на 3 поля: i_id (уникальный), интереса_ид, uid.

Затем вторая БД (интересы) настроена с интересами: интереса_ид (уникальный), интереса_имя

Я бы хотел сделать запрос SQL, чтобы получить список интересов, общих для двух пользователей: пользователя A (владелец профиля) и пользователя B (вы / зритель профиля).Я думаю, мне нужно запросить user_interests, а затем JOIN интересует, чтобы получить имя интереса.

SELECT user_interests.i_id, user_interests.uid, interests.interest_name 
FROM databases.user_interests 
LEFT JOIN databases.interests 
ON interest.interest_id = user_interest.interest_id 
WHERE _______________

Я запутался в предложении where (если это вообще правильный способ сделать это).Моя цель - получить интереса_идентификатора от user_interests.interests, где user_interests.uid и A, а затем B (в отдельных строках).

Я видел эту ссылку, но не мог понять, чего именно мне не хватало: Сгруппировать по x, где y = A и B и C

Ответы [ 4 ]

1 голос
/ 01 июля 2011

Я бы решил эту проблему, соединив две копии user_interests, одну из которых фильтруют для пользователя A (владельца профиля), а другую - для пользователя B (средства просмотра профиля).

SELECT *
FROM interests I
INNER JOIN user_interests A ON
  A.interest_id = I.interest_id
  AND A.user_id = {profile owner}
INNER JOIN user_interests B ON
  B.interest_id = I.interest_id
  AND B.user_id = {profile viewer}

В качестве альтернативы, вы можете дополнить предложение where чем-то вроде ...

SELECT * FROM interests
WHERE interest_id in (SELECT interest_id 
                      FROM users 
                      WHERE user_id = A)
      AND 
      interest_id in (SELECT interest_id 
                      FROM user_interests 
                      WHERE user_id = B)  

Надеюсь, одна из этих работ для вас!Дайте мне знать, если я смогу уточнить

0 голосов
/ 01 июля 2011

Ваш запрос правильный, удалите часть where и запустите ее.Это даст вам тот же результат, что вам нужно ...

0 голосов
/ 01 июля 2011

Вы также можете создать оператор where, например, следующий, если вы хотите получить конкретный набор результатов.Я не дискредитирую ранее представленный ответ, я просто пытаюсь помочь вам с конкретным утверждением WHERE, которое вы ищете.

SELECT user_interests.i_id, user_interests.uid, interests.interest_name 
FROM databases.user_interests 
LEFT JOIN databases.interests 
ON interests.interest_id = user_interests.interest_id 
WHERE user_interests.uid IN ('A','B');

Обратите также внимание, что я изменил ваше ON-соединение, чтобы использовать интересыи user_interests, с 's', добавленным к обоим, так как это имена таблиц.Они поддерживают то же имя схемы, что и в базе данных.

0 голосов
/ 01 июля 2011

Я не думаю, что в этом случае вам нужен пункт where, просто удалите его, и вы получите набор данных, который ищете:

SELECT user_interests.i_id, user_interests.uid, interests.interest_name 
FROM databases.user_interests 
LEFT JOIN databases.interests 
ON interest.interest_id = user_interest.interest_id 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...