0

说,我有 3 张桌子 - purchase, image,coupons

表中的字段purchase是 - purchase_id, image_id, user_id, purchase_time

表中的字段image是 - image_idimage_nameimage_caption其他图像详细信息。

表中的字段coupon是 -image_id和。user_idcoupon_id

[注:单purchase_id有唯一的image_iduser_id(购买的人),但couponimage_id可以有多个user_id(很多人可以从同一张图片生成优惠券)。]

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

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

上述查询涉及单独查询每个图像,这是对数据库的冲击。我可以加入他们吗?

4

1 回答 1

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
于 2012-10-06T15:11:18.127 回答