4
我有3個表格:categories
,items
和items_categories
。這是一個多對多的關係。這個表的結構是下一個:獲取MySQL中多對多關係的最後一個項目
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
)
我有索引,但我刪除,因爲這個例子不需要。
我需要一個查詢,該查詢返回所有加入最後一項的類別,並且它不會重複。由於項目可以有很多類別,比如最終結果類別#1和#2中的項目#300(最新)具有類別#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
我可怎麼辦呢?謝謝!
看起來相當棘手的單個查詢。你不想在存儲過程或代碼中執行它? –
@TJ可能重複的東西很棘手,不是嗎?至少可以完成與上一個項目的連接嗎?通過代碼將運行每個類別的查詢? – udexter
是的,重複的部分。是的,加入最後可以完成。看到這個小提琴:http://sqlfiddle.com/#!2/45563/3(我希望我是正確的) –