Mysql - объединение матчей и не совпадений - PullRequest
0 голосов
/ 05 апреля 2010

Это связано с моим другим вопросом: Управление внешними ключами

Я пытаюсь присоединиться к таблице совпадений и несоответствий.

Итак, у меня есть список интересов, список пользователей и список интересов пользователей.

Я хочу, чтобы запрос возвратил все интересы, независимо от того, имеет ли пользователь интерес или нет (должен быть нулевым в этом случае), только когда пользователь = x. Каждый раз, когда я получаю запрос, работающий только с теми интересами, которые у него есть, а не с интересами, имеет ли он его или нет.

Ответы [ 2 ]

2 голосов
/ 05 апреля 2010

Вы должны использовать LEFT JOINS

Что-то вроде

SELECT  *
FROM    interests i LEFT JOIN
        userinterests ui ON i.interestID = ui.interestID LEFT JOIN
        users u ON ui.userID = u.uiserID
WHERE userID = ? 

где идентификатор пользователя, который вы ищете.

0 голосов
/ 05 апреля 2010
SELECT  * 
FROM    interests i 
LEFT JOIN  userinterests ui ON i.interestID = ui.interestID 
LEFT JOIN  users u ON ui.userID = u.uiserID 
and u.userID = ?  

Если вы поместите условие where в таблицу, которая не должна иметь записей в основной таблице, вы преобразуете соединение из левого соединения во внутреннее соединение. Единственный раз, когда у вас когда-либо возникает условие, когда в правой части левого соединения есть что-то, когда вы ищете записи, которые не совпадают (например, где u.userid равен нулю)

Конечно, вы должны определить поля, которые должны быть выбраны, и никогда не использовать select * в производственном коде, особенно если у вас есть соединение, так как оно отправляет повторяющуюся информацию по сети (данные, объединяющие поля объединения, повторяются) и является пустой тратой ресурсы и плохая практика программирования по нескольким причинам.

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