我有 3 个表categories
:items
和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 将与不同的项目连接。
现在我有这个查询,但它并没有做我真正想要的:
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
我该怎么做?谢谢!