2

私のウェブサイトには、2 つのテーブルを持つ mysql db が含まれています。1 つのテーブルには「id_array」というフィールドがあり、「1,3,7,78,89,102」のような文字列が含まれています。これは、2 番目のテーブルの ID の配列を表します。

2 番目のテーブルの ID を取得するための最良の戦略は何ですか? 私は最速の方法が欲しい。

現在、「SELECT * FROM first_table WHERE id IN (id_array)」を使用しています。

以前は1つずつクエリを実行していましたが、かなり遅いと思います。

誰かが私にデータベースを提供するためのより良い構造を持っているなら、それは素晴らしいことです. この構造は私が思いついた最高のものですが、それほど効率的ではないと確信しています。最初のテーブルの ID に属するすべての ID をすばやく簡単に見つける方法が必要です。

助けていただければ幸いです。

4

2 に答える 2

2

コンマで区切られた値は、データが非正規化されていることを意味しますIN。句は個別の値で機能するため、機能しません。

短期的な解決策

次のように、MySQL の FIND_IN_SET 関数を使用します。

SELECT * 
  FROM first_table 
 WHERE FIND_IN_SET(id, id_array)

長期的な解決策

...この方法で値を保存することはありません。つまり、個別の値を保存するテーブルと、その個別の値のテーブルを元のテーブルに結合するテーブルを持つことを意味します。いいえ:

FIRST_TABLE

  • first_table_id (主キー)

FIRST_TABLE_TYPE_CODES

  • type_code_id (主キー)

FIRST_TABLE_TYPE_MAP

  • first_table_id (主キー)
  • type_code_id (主キー)
于 2010-11-06T19:08:24.177 に答える
0

レコードが別のテーブルに関連付けられている ID を保持するフィールドがありますか? 2 つのテーブルをリンクするルックアップ テーブルを作成して、多対多の関係に役立てることができます。もう少し投稿するか、データベースのセットアップ

于 2010-11-06T18:55:38.047 に答える