4

categoriesitemsおよびの3 つのテーブルがありitems_categoriesます。これは多対多の関係です。このテーブルの構造は次のとおりです。

CREATE TABLE `categories` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
)

CREATE TABLE `items_categories` (
  `item_id` int(10) unsigned NOT NULL,
  `category_id` int(10) unsigned NOT NULL
) 

CREATE TABLE `items` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `thumb` varchar(255) COLLATE utf8_unicode_ci NOT NULL
)

インデックスはありますが、この例では必要ないため削除しました。

それぞれの最後のアイテムに結合されたすべてのカテゴリを返し、繰り返されないクエリが必要です。アイテムは多くのカテゴリを持つ可能性があるため、アイテム #300 (最新) がカテゴリ #1 と #2 を最終結果カテゴリ #1 と #2 に持っているとします。カテゴリ #1 と #2 は異なるアイテムと結合されます。

今のところ、私はこのクエリを持っていますが、それは私がまさに望んでいることをしません:

SELECT category_id, c.name, c.slug, item_id, i.name, i.thumb
FROM   items_categories AS ic
INNER JOIN categories AS c ON c.id = ic.category_id
INNER JOIN (SELECT * FROM   items ORDER  BY id DESC) AS i ON i.id = ic.item_id
GROUP  BY c.id
ORDER  BY c.id ASC

重複した結果が返され、最後ではなく最初の項目が返されます。

ダミーデータ: http://pastebin.com/D75tr4Ry

どうすればそれができますか?ありがとう!

4

1 に答える 1

0

サブクエリに制限を追加するのを忘れただけです。制限を使用すると、最後のアイテムのすべてのカテゴリを取得できます。

これを試して :

SELECT category_id, c.name, c.slug, item_id, i.name, i.thumb 
FROM items_categories AS ic 
INNER JOIN categories AS c ON ic.category_id = c.id 
INNER JOIN (SELECT * FROM items ORDER BY id DESC LIMIT 1) AS i ON ic.item_id = i.id
GROUP BY c.id 
ORDER BY c.id ASC
于 2013-01-12T18:21:46.553 に答える