我在人们和他们的笔记之间有一对多的关系。每个人可以有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次,将偏移量改为1,然后是2,但我得到的只是一个音符返回,而不是每个人一个音符。
我希望这一点是清楚的,如果不是为了一个例子继续阅读:
我有三个人在桌子上。一个人(A)有0个音符,一个(B)有1个音符,一个(C)有2个音符。
首先,我将获得人员B和C的第一个备注,并将它们插入到person表的备注字段中。
然后,我将获得person C的第二个备注,并将其添加到person表的备注字段中。
最后,我将为人员B和C提供备注,其中人员C的备注字段是他们2个备注的拼接。
发布于 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聚合注释字段。
发布于 2012-10-26 04:53:34
您可以使用如下嵌套查询为每个人提供一个备注:
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函数将所有注释合并到一个列中。
https://stackoverflow.com/questions/13075511
复制相似问题