|
MySQL.RU - Webboard
Вернуться
Исключающий запрос. Многие ко многим. (webxtor) 07/03/2005 - 12:31:16
Re: Исключающий запрос. Многие ко многим. (Dinky) 07/03/2005 - 20:17:42
> Original message text:
> From: webxtor - 07/03/2005 - 12:31:16
> Subject:Исключающий запрос. Многие ко многим.
> -----------------
> У меня такая проблема... ну никак не получается одним запросом.. просто голова кругом
>
> Итак, есть 2 таблицы (из которых нужна выборка)
>
> plans: id, name
> users_plans: user_id, plan_id
>
> Пользователь может подписываться на несколько планов сразу при регистрации.
> А вот как вывести те планы, на которые он еще не подписался при регистрации одним запросом....?
>
>
> Допустим id нашего юзера 42. Приведу ниже парочку запросов, которые я делал и обьяснения, почему они (на мой взгляд) не работают:
>
> SELECT DISTINCT p.id AS plan_id, p.name
> FROM payment_plans AS p
> LEFT JOIN users_plans AS up ON p.id = up.plan_id
> WHERE up.user_id <> '42' OR up.user_id IS NULL
>
> Выдает просто все планы которые есть. Оно и понятно, ведь up.user_id <> '42' не дает нужного ограничения, поскольку на каждый план подписан хотя бы один юзер. up.user_id IS NULL вообще никакой силы не дает в случае, если в таблице связей присутсвуют все планы хотя бы раз!
>
> SELECT DISTINCT p.id AS plan_id, p.name, up.user_id
> FROM payment_plans AS p
> LEFT JOIN users_plans AS up ON p.id = up.plan_id
> WHERE up.user_id =42 OR up.user_id IS NULL
> HAVING up.user_id !=42
>
> Не даст никаких результатов все по той же причине - в таблице связей присутствуют все планы.
>
>
From: Dinky - 07/03/2005 - 20:17:42
Subject:Исключающий запрос. Многие ко многим.
-----------------
a tak?
SELECT p.id AS plan_id, p.name
FROM payment_plans AS p
LEFT JOIN users_plans AS up ON (p.id = up.plan_id AND up.user_id = '42')
WHERE up.plan_id IS NULL
--
Dmitry
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
20655
|
|