0

私はテーブルギフトを持っています。ギフトは、テーブルの関連付けを介して多くの gift_images を持つことができます。少なくとも 1 つの gift_images 関連付けを持つ特定のプライバシー レベルの LIMITED # 個のギフトを返品しようとしています。

本質的に、最初に関連付けられた gift_image を含むギフト エントリを返します (gift_image は、位置の値によって並べ替えられ、位置 1 が最初になります)。gift_image が関連付けられていないギフトは無視する必要があります。

これは私が持っているものですが、間違いなく機能していません。

SELECT gifts.* FROM gifts LEFT JOIN gift_images ON gifts.id = gift_images.gift_id WHERE gifts.privacy = 2 ORDER BY gift_images.position ASC LIMIT 10

何か助けはありますか?

4

1 に答える 1

0

画像のないギフトを無視したい場合は、のINNER JOIN代わりにを使用する必要がありLEFT JOINます。さらに、クエリを意味のあるものにするには、giftのフィールドに加えて、gift_imagesからいくつかのフィールドを選択する必要があります。

ギフト画像を含むすべてのギフトに、位置= 1の画像がある場合、このクエリは次のように実行する必要があります。

SELECT gifts.*, gift_images.*
FROM gifts
INNER JOIN gift_images
ON gifts.id = gift_images.gift_id
WHERE gifts.privacy = 2
AND gift_images.position = 1
LIMIT 10

そうでなければ、あなたは試すことができます

SELECT gifts.*, gift_images.*
FROM gifts
INNER JOIN (SELECT gift_id, MIN(position) AS min_position
            FROM gift_images
            GROUP BY gift_id) AS positions
ON positions.gift_id = gifts.id
INNER JOIN gift_images
ON gift_images.gift_id = gifts.id
AND gift_images.position = positions.min_position
于 2013-02-16T17:12:48.827 に答える