首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找每个人的第一、第二、第三等记录

问查找每个人的第一、第二、第三等记录
EN

Stack Overflow用户
提问于 2012-10-26 03:08:06
回答 2查看 413关注 0票数 2

我在人们和他们的笔记之间有一对多的关系。每个人可以有0个或更多的笔记。

我需要把所有的笔记放在一个单独的字段中,因为不会有很多人有笔记,而且我计划只给每个人带来前3个笔记,我想我可以使用最多3个查询来收集我的所有信息。

我的问题是如何将mySQL查询组合在一起,以获得每个人的第一个、第二个等注释。

我有一个查询,它可以让我知道每个人有多少笔记,并且我的表中有这个记录。我试过这样的东西

代码语言:javascript
复制
SELECT
 f_note, f_person_id
FROM
 t_person_table,
 t_note_table
WHERE
 t_person_table.f_number_of_notes > 0
 AND t_person_table.f_person_id = t_note_table.f_person_id
GROUP BY
 t_person_table.f_person_id
LIMIT 1 OFFSET 0

我曾希望运行3次,将偏移量改为1,然后是2,但我得到的只是一个音符返回,而不是每个人一个音符。

我希望这一点是清楚的,如果不是为了一个例子继续阅读:

我有三个人在桌子上。一个人(A)有0个音符,一个(B)有1个音符,一个(C)有2个音符。

首先,我将获得人员B和C的第一个备注,并将它们插入到person表的备注字段中。

然后,我将获得person C的第二个备注,并将其添加到person表的备注字段中。

最后,我将为人员B和C提供备注,其中人员C的备注字段是他们2个备注的拼接。

EN

回答 2

Stack Overflow用户

发布于 2012-10-26 04:39:37

欢迎来到SO。您要做的事情,从表中为提到的每个人选择最近的三个项目,在MySQL中并不容易。但这是可能的。请参阅此问题。

Select number of rows for each group where two column values makes one group

而且,请看我的回答。

Select number of rows for each group where two column values makes one group

一旦查询得到了这三行,就可以使用GROUP_CONCAT() ... GROUP BY聚合注释字段。

票数 0
EN

Stack Overflow用户

发布于 2012-10-26 04:53:34

您可以使用如下嵌套查询为每个人提供一个备注:

代码语言:javascript
复制
SELECT
 f_person_id,
 (SELECT f_note
  FROM t_note_table
  WHERE t_person_table.f_person_id = t_note_table.f_person_id
  LIMIT 1) AS note
FROM
 t_person_table
WHERE
 t_person_table.f_number_of_notes > 0

注意,SQL中的表基本上没有定义的固有顺序,因此您应该在子查询中使用一些表单或ORDER BY。否则,您的结果可能是随机的,并且重复运行请求不同的注释可能会意外地返回相同的数据。

如果您的目标是在任何情况下连接多个注释,那么可以使用GROUP_CONCAT函数将所有注释合并到一个列中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13075511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档