0

たとえば、3 つのテーブルがあるとします - purchase, image,coupons

purchaseテーブルのフィールドは - purchase_idimage_iduser_idですpurchase_time

imageテーブル内のフィールドは - image_idimage_nameimage_captionおよびその他の画像の詳細です。

表のフィールドcouponは - image_iduser_idおよびcoupon_idです。

[注: 1 つの場合purchase_idは固有(購入した人) を持ちますがimage_id、1 つの場合は複数持つことができます(多くの人が同じ画像からクーポンを生成できます)。]user_idcouponimage_iduser_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 に答える