|
MySQL.RU - Webboard
Вернуться
Исключающий запрос. Многие ко многим. (webxtor) 07/03/2005 - 12:31:16
Re: Исключающий запрос. Многие ко многим. (Dinky) 07/03/2005 - 20:17:42
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
Не даст никаких результатов все по той же причине - в таблице связей присутствуют все планы.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
20655
|
|