2017-03-08 5 views
0

私は、ユーザーに関する情報、クーポン情報、およびユーザーがクーポンを使用していた場合、3つのMySQLテーブルを持っています。
ユーザー表
MySQLは使用されていないクーポンを取得しています

+----------+-------------+ 
| User_ID | Name  | 
+----------+-------------+ 
| 1  | Sarah J  | 
| 2  | John Smith | 
| 3  | Osman Lee | 
+----------+-------------+ 

クーポン表

+----------+-------------+ 
| Coupon_ID| Title  | 
+----------+-------------+ 
| 1  | Free Stuff | 
| 2  | 50% Off  | 
| 3  | $5 off $25 | 
+----------+-------------+ 

そして換金表

+----------+---------+----------+ 
| Coupon_ID| User_ID | Redeemed | 
+----------+---------+----------+ 
| 1  | 1 | yes | 
| 2  | 2 | yes | 
| 1  | 2 | yes | 
+----------+---------+----------+ 

基本的に私はすべてのユーザーのために、この出力をしたい:
サラ・Jこのような何か:クーポン2 ジョン・スミス:クーポン3
オスマン・リー:私は使用してみましたクーポン1、2

は参加したが運これまでのところ。助言がありますか?

SELECT Coupons.coupon_id, Coupons.title 
FROM Coupons 
LEFT JOIN Redeemed ON Redeemed.coupon_id != Coupons.coupon_id 
WHERE Users.user_id = '1' 

答えて

0

[サラのために]アイデアは、すべての行を生成し、存在するものを削除することです - cross joinleft join

select u.user_id, c.coupon_id as not_used_coupon_id 
from coupons c cross join 
    users u left join 
    redeemed r 
    on r.coupon_id = c.coupon_id an dr.user_id = u.user_id 
where r.coupon_id is null; 

あなたはwhere句を追加することができますユーザーテーブル。

0

クーポンとユーザーの間のすべての関係は、譲渡表にあるものとします。 その場合は、あなたは、単にこのようなinner joinを使用することができます。

SELECT Coupons.coupon_id, Coupons.title 
FROM Redeemed r 
INNER JOIN Users u ON 
u.User_ID = r.User_ID 
INNER JOIN Coupons c ON 
c.Coupon_ID = r.Coupon_ID 
where r.Redeemed = 'No' 

私は償還値が償還されていないクーポンのために何もすることができることを負いません。

私は助けて欲しいと思っています。

関連する問題