2011-09-30 96 views
1

我需要你的幫助來弄清楚如何進行查詢。 我的想法是建立一個獎勵用戶的信用體系。 管理員輸入學分的描述(例如,用戶訂閱了新聞通訊,他發表了至少10條評論......)。 我有3個表:如何檢查是否存在關係 - 多對多關係

  • 用戶(ID和名稱),
  • 獎勵(ID和說明),
  • rewards_users(id_reward,id_user)。

根據用戶與獎勵之間是否存在關係,我將提取一個由用戶名和Y或N形成行的摘要html表。

+0

爲了澄清,你要拿出一個SQL查詢根據你的三張桌子列出用戶的所有獎勵? – rhololkeolke

+0

我的問題是知道用戶什麼時候沒有獎勵。 因此,我想檢查,如果關係存在 – Dario

回答

2

使用下面的查詢來顯示所有的獎勵爲特定用戶

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 

注意:未經測試。

+0

這就是我正在尋找!謝謝。 – Dario

+0

我以前從未使用過'CASE'。這正是我所需要的。 – Mike

1

聽起來好像是你需要離開你的用戶表和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;