[英]Mysql one to many relationship
我有两张桌子:
带有 IDItem 字段的 TABLE 项目 带有 IDcomment、IDItem、datePublished 和评论字段的 TABLE 评论。
如果我想列出最后 10 条评论没问题,我只需对“评论”表进行排序。 问题是当我想列出单个项目的最后十条评论时,这意味着项目不会重复。
在使用索引方面有什么最好的方法来实现这一点? 如果我按“评论”排序并按 IDItem 分组,我不会得到每个项目的最后一条评论,因为该组似乎是随机排序的:-(
我找到了将“lastDate”带到“items”表的解决方案,这样我就可以按项目排序,并且我会有正确的排序顺序,但是当我加入评论表时,如果它,我会得到 10 行相同的项目 id有 10 条评论:-(
如何正确连接一对多,以便我从左表中只获得一项,而在右表中获得一项?
我不确定我是否很清楚。
听起来您正在尝试返回具有最近 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 条评论的限制
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 这个代码。 将 TOP 1 替换为 LIMIT 1 等。
(更新)这个呢?
SELECT IDcomment, IDitem from COMMENTS where IDitem in (SELECT DISTINCT(IDitem) FROM comments);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.