質問

すべてのデータを忠実に正規化したのですが、出力用に 3NF 行を 1 行に結合するときに問題が発生しました。これまではサーバーサイドのコーディングでこれを行ってきましたが、さまざまな理由から、別の行に関連するすべての行を選択し、それらをすべて MySQL で 1 つの行に結合する必要があります。

それで説明してみると、次のようになります。

テーブルが 3 つあります。

  • カテゴリー
  • 記事
  • カテゴリ記事_3NF

カテゴリには以下が含まれます カテゴリID + タイトル、説明などArticles テーブルには、任意の数の記事を含めることができます。 記事ID + コンテンツを格納するテキスト フィールド。の カテゴリー記事 テーブルは 2 つをリンクするために使用されるため、両方の カテゴリID そしてその 記事ID.

ここで、Category レコードを選択し、リンクする categoryArticles_3NF テーブルを介して Articles テーブルに JOIN すると、結果はそのカテゴリに含まれる記事ごとに個別の行になります。問題は、カテゴリごとにコンテンツを含む 1 行を出力したいことです。 全て 内の記事。

それがばかげた要求のように聞こえるかもしれませんが、それは実際にそうなのです。私は問題を説明する良い方法として記事を使っているだけです。私のデータは実際には多少異なります。

とにかく、これを達成する唯一の方法は、「」を使用することです。グループコンキャット' ステートメントを使用してコンテンツ フィールドをグループ化します。これの問題は、返されるデータ量に制限があることであり、より多くのデータを処理できるようにする必要があります。

誰かこれを行う方法を教えてもらえますか?

ありがとう。

役に立ちましたか?

解決

これは、詳細な情報がなければ、フロントエンドで実行する必要があるように思えます。

必要に応じて、システム変数を設定することで GROUP_CONCAT のサイズ制限を増やすことができます。 group_concat_max_len. 。それに基づく制限があります max_allowed_pa​​cket, を増やすこともできます。パケットの最大サイズは1GBだと思います。それを超える必要がある場合は、設計に重大な欠陥があることになります。

編集:これがコメントに埋もれるだけでなく、回答に含まれるように...

変更したくない場合は、 group_concat_max_len グローバルに変更できる場合は、次のようにセッションのみ変更できます。

SET SESSION group_concat_max_len = <your value here>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top