2012-10-25 138 views
2

我在人与笔记之间有一对多的关系。每个人可以有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,但我得到的只是一个音符回来,不是每人一个音符。

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

我在表中3人。一个人(A)有0个笔记,一个(B)有1个,一个(C)有2个。

首先,我会得到人B和C的第一张纸条,并将它们插入到我的人物笔记字段中。

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

最后,我会为B人和C人留下笔记,其中人C的笔记字段将是他们两张笔记的连结。

回答

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函数将所有笔记组合到一个列中。

+0

谢谢!一旦我看到你的答案,我记得我知道这一点。当我真的需要在选择部分完成时,我需要在“发件人”部分中进行选择。但我也玩过一些GROUP_CONCAT,并且能够提出一个简单的声明,让我知道我需要什么。我感谢大家的帮助。我是一名中级sql用户,正在努力解决更复杂的查询问题,并且我肯定会回来。 –

相关问题