0

这是我的情景:

我在一张名为notes. 每个注释都有一个person_id列来标识注释的对象。

我想检索person_id表中为每个人写的最后 5 条笔记。

因此,与其检索所有笔记并使用 PHP 为每个人提取最后五个,我可以在一个简单的 MySQL 查询中做到这一点吗?

提前致谢!

更新

有几个人误解了我的问题。我会尝试更好地解释。

假设我的notes桌子上有 20 个笔记。然后我的people桌子上有3个人。他们的名字是吉姆、莎莉和兰德尔

notes表格中,Jim 有 6 个音符,Sally 有 9 个音符,Randle 有 5 个音符。

我想提取他们所有的笔记,但限制为每人 5 个笔记。所以从 20 个音符中,我想提取其中的 15 个。吉姆 5 分,莎莉 5 分,兰德尔 5 分。

下面的 PHP 和 MySQL 示例是我想要避免的 - 从表中选择所有行。当表达到 1,000,000 行时,需要处理大量数据:

$notes_array = array();

$notes = $db->query("SELECT person_id, notes FROM notes");
foreach($notes AS $note) {

    // Create an array for this person's notes
    if (!isset($notes_array[$note->person_id]))
        $notes_array[$note->person_id] = array();

    // If this person has 5 notes, we do not need anymore
    if (count($notes_array[$note->person_id]) == 5)
        continue;

    // Add note to an array
    $notes_array[$note->person_id][] = $note->notes;

}
4

1 回答 1

5
select  a.*
from    NOTES a
where 
(
    select  count(*) 
    from    NOTES as b
    where   b.Person_ID = a.Person_ID and b.AutoNumber >= a.AutoNumber
) <= 5

更改AUTONUMBER为您的自动递增字段或日期时间字段可以指示记录的年龄。

于 2013-05-10T05:40:24.297 回答