你真正需要的是這樣的:
SELECT
cat.cat_id, cat.cat_name, item_id, item_author, item_name, item_pic_big
FROM item_table a
JOIN cat_table b ON a.cat_id = b.cat_id
WHERE a.item_id IN (SELECT item_id
FROM item_table
WHERE cat_id = b.cat_id
LIMIT 5)
GROUP BY a.item_id
ORDER BY b.cat_id
不幸的是,如果你嘗試運行此,你會得到這個令人失望的 錯誤消息:
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
所以你需要一個解決方法。你可以看到可能的解決方法的列表,在這裏: http://www.artfulsoftware.com/infotree/queries.php#104
編輯:有第一個解決方案可以被翻譯成你的結構是這樣的: (我沒有你的表,因此可能存在微小的列名問題)
SELECT temp2.cat_id, temp2.item_id,
temp2.cat_name, temp2.item_author,
temp2.item_name, temp2.item_pic_big
FROM
(SELECT
temp.cat_id,
temp.item_id,
temp.cat_name,
temp.item_author,
temp.item_name,
temp.item_pic_big,
IF(@prev <> temp.cat_id, @rownum := 1, @rownum := @rownum+1) AS rank,
@prev := temp.cat_id
FROM (SELECT
a.item_id,
b.cat_id,
b.cat_name,
a.item_author,
a.item_name,
a.item_pic_big
FROM item_table a
JOIN cat_table b ON a.cat_id = b.cat_id
ORDER BY cat_id, item_id) AS temp
JOIN (SELECT @rownum := NULL, @prev := 0) AS r
ORDER BY temp.cat_id, temp.item_id) as temp2
WHERE temp2.rank <= 5
ORDER BY temp2.cat_id, temp2.item_id;
這很複雜...... :)謝謝 – 2011-04-26 14:57:17
@Itai - Ein Be'aya :) – Galz 2011-04-26 15:36:29