我和人之间有一对多关系。每人可以有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个音符的连接。
答案 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
功能将所有音符组合成一列。