Синтаксический вызов SQL - PullRequest
       9

Синтаксический вызов SQL

2 голосов
/ 09 января 2011

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

tbl_options
id_option
option

Следующая таблица, которую я использую для хранения, какую из этих опций выберет пользователь.Например:

tbl_selected
id_selected
id_option
id_user

Я использую PHP для циклического просмотра таблицы tbl_options, чтобы сгенерировать полный список флажков, которые пользовательможно выбрать из.Когда пользователь выбирает опцию, id_option и id_user сохраняются в таблице tbl_selected.Когда пользователь отменяет выбор опции, запись id_selected удаляется из таблицы tbl_selected.

Задача, с которой я сталкиваюсь, - лучший способ получить полный список опций в tbl_options, плюс запрос на указание связанных записейхранится в таблице tbl_selected.

Я попытался LEFT JOIN'ing tbl_options в tbl_selected, который предоставляет мне полный список опций, но как только я добавлю WHERE id_user = ###, запрос вернет толькоте записи со значениями в tbl_selected.В идеале я хотел бы видеть результаты запроса следующим образом:

опция id_option id_user
1 Яблоки 3
2 Апельсины 3
3 Бананы
4 Груши
5Персики 3

Это указывает на то, что пользователь № 3 хранит яблоки, апельсины и персики.Это также указывает на то, что пользователь № 3 не выбрал «Бананы» или «Груши».

Возможно ли это с помощью оператора SQL или я должен использовать другую технику?

1 Ответ

4 голосов
/ 09 января 2011

Ваша проблема в том, что пользовательское ограничение применяется ко всему запросу. Чтобы применить его только к условию присоединения, необходимо добавить его в предложение ON следующим образом:

select o.id_option, o.[option], s.id_user
from tbl_options o
    left outer join tbl_selected s
        on o.id_option = s.id_option and s.id_user = 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...