我有两张桌子:
具有IDItem字段的表项 使用IDcomment,IDItem,datePublished和注释字段表注释。
如果我想列出最后10条评论没问题,我只需对“评论”表进行排序。问题是当我想列出关于单个项目的最后十条评论时,这意味着项目不会重复。
有关使用索引的任何最佳方法吗?如果我按IDItem的'评论'和分组订购,我不会在每个项目上得到最后的评论,因为该组似乎随机排序: - (
我找到了将'lastDate'带到'items'表的解决方案,所以我可以按项排序,我将有正确的排序顺序,但当我加入评论表时,我得到10行相同的项id如果有10条评论: - (
如何以正确的方式加入一对多,所以我只从左表中得到一个项目,右表上有一个项目?
我不确定我是否非常清楚。
答案 0 :(得分:1)
听起来你正试图获得最近10条评论的10条评论,每条评论一条评论是否正确?
如果是这样,试试这个:
SELECT * FROM Items I
JOIN
(SELECT TOP 10 * FROM Comments C2 WHERE DatePublished=
(SELECT MAX(DatePublished) FROM Comments C3 WHERE C2.IDItem=C3.IDItem)
ORDER BY DatePublished DESC) C1
ON I.IDItem=C1.IDItem
已编辑:删除了额外的SELECT并添加了10条评论的返回限制
答案 1 :(得分:0)
DECLARE @item TABLE
(
IDItem int
)
DECLARE @comment TABLE
(
IDComment int,
DatePublished date,
IDItem int,
Comment varchar(100)
)
INSERT INTO @item (IDItem) VALUES (1);
INSERT INTO @item (IDItem) VALUES (2);
INSERT INTO @item (IDItem) VALUES (3);
INSERT INTO @item (IDItem) VALUES (4);
INSERT INTO @comment (IDComment, DatePublished, IDItem, Comment) VALUES (1,'2011-01-01', 1, 'test1');
INSERT INTO @comment (IDComment, DatePublished, IDItem, Comment) VALUES (2,'2011-01-02', 1, 'test2');
INSERT INTO @comment (IDComment, DatePublished, IDItem, Comment) VALUES (3,'2011-01-01', 2, 'test3');
INSERT INTO @comment (IDComment, DatePublished, IDItem, Comment) VALUES (4,'2011-01-03', 2, 'test4');
INSERT INTO @comment (IDComment, DatePublished, IDItem, Comment) VALUES (5,'2011-01-02', 3, 'test5');
INSERT INTO @comment (IDComment, DatePublished, IDItem, Comment) VALUES (6,'2011-01-05', 3, 'test6');
SELECT i.IDItem, (SELECT TOP 1 c.Comment FROM @comment c WHERE c.IDItem = i.IDItem ORDER BY c.DatePublished) FROM @item i
退货
1 test1
2 test3
3 test5
4 NULL
如果你正在寻找什么,只需要mysql这段代码。用LIMIT 1等替换TOP 1。
答案 2 :(得分:-1)
(更新)这个怎么样?
SELECT IDcomment, IDitem from COMMENTS where IDitem in (SELECT DISTINCT(IDitem) FROM comments);