Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
20655



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |