1

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

試して説明するには:

私は3つのテーブルを持っています。

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

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

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

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

とにかく-これを達成するために私が見ることができる唯一の方法は、「GROUP_CONCAT」ステートメントを使用してコンテンツフィールドをグループ化することです-これの問題は、これが返すことができるデータの量に制限があることです.はるかに多くを処理できます。

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

ありがとう。

4

1 に答える 1

2

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

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

編集:これが答えにあり、コメントに埋もれていないように...

group_concat_max_lenをグローバルに変更したくない場合は、次の方法でセッションだけを変更できます。

SET SESSION group_concat_max_len = <your value here>
于 2010-01-14T03:12:51.467 に答える