これが私のシナリオです:
と呼ばれる表に人々について書かれたメモがあります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;
}