1

各レコードが ID、groupID、およびメモ フィールドであるテーブルがあります。ID は一意ではなく、複数のグループ ID に関連付けることができます。また、各 ID-groupID コンボは複数のメモに関連付けることができます。ここで印刷しようとしている主なデータはメモ フィールドです。

id             | groupID    | notes
------------------------------------------------------------------
JWOFJ903JCKDF8 | groupID-22 | new id, new id-groupID combo
JWOFJ903JCKDF8 | groupID-33 | repeat id (line 1), new id-groupID combo
JWOFJ903JCKDF8 | groupID-33 | repeat id (lines 1&2), repeat id-groupID (line 2)
...
DF8#CKJ90JJ3WO | groupID-22 | new id, new id-groupID combo
DF8#CKJ90JJ3WO | groupID-44 | repeat id (line 4), new id-groupID combo
...

データを印刷するとき、同じ ID-groupID コンボに該当するすべてのメモがグループ化されるようにメモを選択するにはどうすればよいですか? 同じ ID に該当するすべてのグループ ID がグループ化されますか?

したがって、私のレポートは次のようになります。

JWOFJ903JCKDF8
   -groupID-22
      - [line 1 of the data] new id, new id-groupID combo
   -groupID-33
      - [line 2 of the data] repeat id (line 1), new id-groupID combo
      - [line 3 of the data] repeat id (lines 1&2), repeat id-groupID (line 2)
DF8#CKJ90JJ3WO
   -groupID-22
      - [line 4 of the data] new id, new id-groupID combo
   -groupID-44
      - [line 5 of the data] repeat id (line 4), new id-groupID combo

このテーブルは非常に大きく、200,000 を超えるレコードがあり、さらに増え続けています。

4

1 に答える 1

1

実際には非常に単純です:

1/ 目的のレコードを選択します (ID と groupId の順)

SELECT id,groupID,notes
  FROM <your table name>
 WHERE ...
 ORDER BY id, groupID
 LIMIT ...

2/ 単純な ID および/または LIMIT の結果を取得するための WHERE で結果を制限します (単一のレポートでこれらの 200k レコードを表示する必要があるとは思えません)。SELECT コマンドについては、Mysql のドキュメントを参照してください。

3/フロントエンドで、変数を使用して結果をカウントし、idまたはgroupIDを変更するたびにインデントします

私が提案する場合、データベースモデルは次のように変更する必要があります:

  • 自動増分キーのように、列 ID は一意である必要があります
  • 新しい列(キーと呼びましょう)は現在のIDを保存する必要があります
  • 列 groupId が既存のテーブル グループを参照している場合は、このテーブルを同じ方法で変更します。
    • 一意の自動増分 ID 列、名前、
    • レコードテーブルには、列名が示すようにグループテーブルIDのみを保存します
于 2012-07-13T23:22:42.077 に答える