0

これが私のシナリオです:

と呼ばれる表に人々について書かれたメモがありますnotes。各メモには、person_idメモの対象者を識別するための列があります。

テーブル内のそれぞれについて書かれた最後の 5 つのメモを取得したいと考えてperson_idいます。

すべてのメモを取得し、PHP を使用して個人ごとに最後の 5 つを抽出するのではなく、1 つの単純な MySQL クエリでこれを行うことができますか?

前もって感謝します!

アップデート

私の質問を誤解している人が何人かいます。もっとうまく説明してみます。

テーブルに 20 個のメモがあるとしnotesます。私のpeopleテーブルには3人います。彼らの名前はジム、サリー、ランドルです

テーブルではnotes、ジムには 6 つのメモがあり、サリーには 9 つのメモがあり、ランドルには 5 つのメモがあります。

すべてのメモを抽出したいのですが、1 人あたり 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 に答える