查找每人的第一,第二,第三等记录

时间:2012-10-25 19:08:06

标签: mysql rows

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

我需要将所有笔记放在一个单独的字段中,因为没有很多人会有笔记,我打算只为每个人带来前3个笔记,我认为我最多可以使用3个笔记查询收集我的所有信息。

我的问题在于将mySQL查询放在一起以获得每人的第一,第二等注释。

我有一个查询,让我知道每个人有多少笔记,我在桌子上有。我试过像

这样的东西
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次,将OFFSET更改为1,然后是2,但我得到的只是一张纸条,而不是每人一张纸条。

我希望这是明确的,如果没有阅读一个例子:

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

首先,我会得到B和C人的第一个音符,并将其插入我的人员表注释字段。

然后我会得到人C的第二个音符,并将其添加到人物表中的音符字段。

最后,我会记录B和C人的注释,其中C人的注释字段将是他们的2个音符的连接。

2 个答案:

答案 0 :(得分:0)

欢迎来到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来汇总记事字段。

答案 1 :(得分:0)

您可以使用嵌套查询获得每人一张便条:

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功能将所有音符组合成一列。