Как проверить, существуют ли отношения - отношения многие ко многим - PullRequest
1 голос
/ 30 сентября 2011

Мне нужна ваша помощь, чтобы выяснить, как сделать запрос. Моя идея заключалась в том, чтобы создать кредитную систему для поощрения пользователей. Администратор вводит описание кредитов (например, пользователь подписался на новостную рассылку, он опубликовал не менее 10 комментариев ...). У меня есть 3 таблицы:

  • пользователей (идентификатор и имя),
  • награды (идентификатор и описание),
  • rewards_users (id_reward, id_user).

Я бы вытащил сводную HTML-таблицу, строки которой образованы именем пользователя и Y или N в зависимости от того, существует ли связь между пользователем и вознаграждением.

Ответы [ 2 ]

2 голосов
/ 30 сентября 2011

используйте следующий запрос, чтобы показать все вознаграждения для конкретного пользователя

SELECT r.description, CASE WHEN ru.user_id IS NULL THEN 'N' ELSE 'Y' END awarded
FROM rewards r
LEFT JOIN rewards_users ru ON r.reward_id=ru.reward_id AND ru.user_id = 1

и использовать его как подзапрос, чтобы получить информацию о пользователях тоже

например:

SELECT u.user_id, u.user_name, ua.award, ua.awarded
FROM users u,
     (
     SELECT r.description, CASE WHEN ru.user_id IS NULL THEN 'N' ELSE 'Y' END awarded
     FROM rewards r
     LEFT JOIN rewards_users ru ON r.reward_id=ru.reward_id AND ru.user_id = u.user_id
     ) ua
WHERE u.userid=1

Примечание: не тестировалось.

1 голос
/ 30 сентября 2011

Звучит так, будто вам нужно левое соединение между таблицей пользователей и таблицей rewards_users, а затем обрабатывать нулевые значения rewards_id:

select u.id as users_id,
u.name as users_name,
case when ur.rewards_id is null then 'N' else 'Y' end as hasRewards
from users u left join users_rewards ur
on u.id = ur.users_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...