Mysql一对多的关系

时间:2011-07-06 12:35:13

标签: mysql join relationship

我有两张桌子:

具有IDItem字段的表项 使用IDcomment,IDItem,datePublished和注释字段表注释。

如果我想列出最后10条评论没问题,我只需对“评论”表进行排序。问题是当我想列出关于单个项目的最后十条评论时,这意味着项目不会重复。

有关使用索引的任何最佳方法吗?如果我按IDItem的'评论'和分组订购,我不会在每个项目上得到最后的评论,因为该组似乎随机排序: - (

我找到了将'lastDate'带到'items'表的解决方案,所以我可以按项排序,我将有正确的排序顺序,但当我加入评论表时,我得到10行相同的项id如果有10条评论: - (

如何以正确的方式加入一对多,所以我只从左表中得到一个项目,右表上有一个项目?

我不确定我是否非常清楚。

3 个答案:

答案 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);