1

私は3つのテーブルを持っています。画像、カテゴリ、image_category.

image:         id | title | imageURL
categories:     cat_id | cat_name
image_category: image_id | cat_id

すべての画像を新しいものから順に選択するための私の現在のクエリは次のとおりです。

SELECT image.id as ID, image.title as title, categories.cat_name as CAT 
FROM image_category 
LEFT JOIN image 
ON image_category.image_id = image.id 
INNER JOIN categories 
ON image_category.cat_id = categories.cat_id 
ORDER BY ID DESC

カテゴリごとに最新の 4 つの画像を表示したいと思います。最大の image.id は最新のイメージです。

例えば。3 つのカテゴリがあり、各カテゴリに 40 枚の画像があるとします。各カテゴリから最新の 4 枚の画像を表示したいと考えています。その後、カテゴリごとに次の 4 つを表示し、画像がなくなるまでカテゴリごとに次の 4 つを表示しようとします。

このソリューションは、私が探しているもののようです。

SELECT i1.*
FROM item i1
LEFT OUTER JOIN item i2
ON (i1.category_id = i2.category_id AND i1.item_id < i2.item_id)
GROUP BY i1.item_id
HAVING COUNT(*) < 4
ORDER BY category_id, date_listed;

しかし、image_id と category_id を接続するリレーショナル テーブルがあります。その追加のテーブル結合でこれを実装する方法を理解できません。

SQLの第一人者からの助けをいただければ幸いです。

4

2 に答える 2

0
SELECT *
FROM (
  SELECT a.id as ID,a.title as title,b.cat_name as CAT, row_number() OVER (PARTITION BY b.cat_id ORDER BY b.cat_id,a.id desc) AS n
   from images a, categories b, image_category c 
    where a.id = c.image_id
    and b.cat_id = c.cat_id
) x
WHERE n < 4
ORDER BY b.cat_id,a.id desc;
于 2013-07-03T05:31:44.193 に答える