1

私は本当に有用なものを見つけることができませんでした。Codeigniter と MySQL を使用して独自の管理パネルを作成しており、多対多の関係を除いてすべてが完了しています。

メイン テーブルは Product テーブルです。5 つの多対多の関係 (カテゴリ、マテリアル、色、タグ、都市) があります。これらの列 (ID、およびカテゴリ/タグ/都市の名前など) を持つテーブルはそれぞれに 5 つあり、もちろん製品と他のテーブルの両方の ID を持つテーブルがあります。

最初に、すべての製品を 1 つのテーブルに一覧表示し、列にカテゴリ、材料、タグなどの列を配置し、対応するセルにすべての項目をコンマで一覧表示したいと考えています...

1 つの行は次のようになります。

| | ID | 名前 | 説明 | カテゴリ 1、カテゴリ 2、... | 材料 1、... | タグ 1、タグ 2、タグ 3、タグ 4、... |

あなたが私を理解してくれることを願っています。次に、追加機能は簡単に思えますが、更新機能は本当にトリッキーだと思います。そのため、可能な限り迅速に解決できるように、何か助けをいただければ幸いです。最初に、選択したすべての項目をチェックして、リンク テーブルにない新しいエントリがあるかどうかを確認し、次に、選択されていないアイテムがリンク テーブルにあるかどうかを確認して削除する必要があると思います。これを最も最適化するにはどうすればよいですか?

4

1 に答える 1

2

これは直接codeigniterのことではなく、SQLのことです。

ディスプレイの管理は簡単です。関連するすべてのテーブルを結合できるGROUP BYためproduct_id、結果セットには1つの製品のみが表示されます。GROUP_CONCAT次に、MySQLの機能を使用して、関連するテーブルファイルを行ごとにグループ化できます。

これのパフォーマンスは、実際にはアプリケーションとその使用法によって異なります。たとえば、私たちが持っているアプリでは、product_id1つのクエリを実行してすべての情報を一度に取得するよりも、によって返される行ごとに複数のクエリを実行して他の情報を取得する方が迅速で応答性が高くなります。だから、あなたはそれをテストする必要があります。

更新により、はい、それは厄介になる可能性があります。1つの方法は、既存のものをすべて削除してからproduct_id、送信されたものをすべて追加することです。もう1つは、既存のものを提出されたものと照合し、新しいものだけを追加して、一致しないものを削除することです。私はそれがあなたにとって理にかなっていることを願っています:)

于 2013-03-10T08:19:55.867 に答える