设计一个SQL查询

时间:2012-10-06 15:03:58

标签: mysql join

说,我有3个表 - purchaseimagecoupons

purchase表格中的字段为 - purchase_idimage_iduser_idpurchase_time

image表格中的字段为 - image_idimage_nameimage_caption以及其他图片详情。

coupon表格中的字段为 - image_iduser_idcoupon_id

[注意:单个purchase_id有唯一的image_iduser_id(购买的人),但对于coupon,单个image_id可以有多个user_id {1}}(许多人可以从同一张图片中生成优惠券)。 ]

首先,我正在选择图像列表 -

SELECT p.purchase_id, 
       p.purchase_time, 
       p.user_id, 
       i.image_name, 
       i.image_caption 
FROM purchase p 
LEFT JOIN image i ON p.image_id = i.image_id 
WHERE p.user_id IN ($friends_id_string) 
ORDER BY p.purchase_time DESC

friends_id_string是用户

所有朋友的user_id列表

接下来,我需要每张图片coupon_id(其值也可以是NULL

SELECT c.coupon_id 
FROM coupon c 
WHERE c.image_id = $image_id AND c.user_id = $user_id

因此,此查询会告诉我该用户和该图片是否存在有效coupon_id

上述查询涉及分别查询每个图像,这是对数据库进行锤击。我可以一起加入吗?

1 个答案:

答案 0 :(得分:0)

这没有经过测试,因为您没有提供架构,示例记录和所需的结果,但尝试一下,

SELECT  p.purchase_id,
        p.purchase_time,
        p.user_id,
        i.image_name,
        i.image_caption,
        c.coupon_id
FROM    purchase p
        LEFT JOIN IMAGE i
            ON p.image_id = i.image_id
        LEFT JOIN coupon c
            ON c.image_id = p.image_ID AND
                c.user_id = p.user_ID
WHERE p.user_id IN ($FRIENDS_ID_STRING)
ORDER BY p.purchase_time DESC