2

私は人々と彼らについてのメモの間に1対多の関係を持っています。1 人あたり 0 個以上のメモを含めることができます。

すべてのメモを 1 つのフィールドにまとめる必要があります。メモを持っている人はあまり多くなく、1 人あたり最初の 3 つのメモだけを持ち込む予定なので、最大で 3 つのクエリを使用して収集できると考えました。私のすべての情報。

私の問題は、mySQL クエリをまとめて、1 人あたりの最初、2 番目などのメモを取得することです。

各人が持っているメモの数を知ることができるクエリがあり、それがテーブルにあります。私は何かを試しました

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

OFFSET を 1 に変更してから 2 に変更して、これを最大 3 回実行することを望んでいましたが、1 人につき 1 つのメモではなく、1 つのメモが返されるだけです。

例を読んでいない場合でも、これが明確であることを願っています。

私はテーブルに3人います。1 人 (A) はノートが 0 で、1 人 (B) はノートが 1 つ、もう 1 人 (C) は 2 です。

まず、人物 B と C の最初のメモを取得し、それらを人物テーブルのメモ フィールドに挿入します。

次に、人物 C の 2 番目のメモを取得し、それを person テーブルのメモ フィールドに追加します。

最終的に、B と C のメモがあり、C のメモ フィールドは 2 つのメモの連結になります。

4

2 に答える 2

0

SOへようこそ。あなたが行おうとしている、言及された人ごとにテーブルから最新の 3 つの項目を選択することは、MySQL では簡単ではありません。しかし、それは可能です。この質問を参照してください。

2 つの列の値が 1 つのグループを構成する各グループの行数を選択します

そして、それに対する私の答えを見てください。

2 つの列の値が 1 つのグループを構成する各グループの行数を選択します

3 つの行を提供するクエリを取得したらGROUP_CONCAT() ... GROUP BY、メモ フィールドを集計するために使用できます。

于 2012-10-25T20:39:36.623 に答える
0

次のようなネストされたクエリを使用して、1 人につき 1 つのメモを取得できます。

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関数を使用してすべてのメモを 1 つの列に結合できます。

于 2012-10-25T20:53:33.710 に答える