0

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

最初のテーブルは と呼ばれprofessions、ID によってインデックスが付けられます。そのため、各職業には固有の ID が関連付けられています。

私の 2 番目のテーブルは と呼ばれcontacts、そこにはprofession現在、特定の職業が関連付けられている ID のみを保持するフィールドがあります。

私の問題は、複数の職業が関連付けられている連絡先がある場合はどうなるかということです。

テーブルにクエリを実行する最良の方法と、連絡先の職業を保存する方法は何でしょうか。私がやりたくなかったのは、私が持っている職業ごとに 0 または 1 の int を格納するためのフィールドを作成することです。その理由は、職業テーブルを動的に成長させ、クエリ時にサイトの動的な変更を数値に反映させたいからです。

4

3 に答える 3

2

多対多の関係があります。MySQL でそれを実装するには、リンク テーブルを使用する必要があります。したがってprofessionscontacts各テーブルには id が必要ですが、外部キーはありません。profession_contact_links独自の id を含む or something と呼ばれる新しいテーブルを作成し、 andprofession_idcontact_idそれぞれのテーブルの外部キーです。次に、各職業にリンクされた多くの連絡先、および各連絡先にリンクされた多くの職業を持つことができます。選択で 2 つのメイン テーブルを接続するには、2 つの結合が必要です。それらが何であるかは、正確に何を選択したいかによって異なります。

于 2012-09-14T22:20:42.960 に答える
2

このモデリングの問題に対する標準的な解決策は、リンク テーブルと呼ばれます。

基本的に、これはリンクされている 2 つのテーブルの ID を含むテーブルであるため、列へのリンク テーブルと、これらの列の両方である主キーを作成します。

(profession_id, contact_id)

または他の順序...それほど重要ではありませんが、順序はパフォーマンスに影響を与える可能性があります。最も頻繁に検索するキーは、最初に必要なキーです。

次に、SELECT ... IN (...)またはSELECT ... JOIN ...を使用して、目的のデータをクエリします。

于 2012-09-14T22:23:07.937 に答える
1

あなたが望むものとそれをどのように見つけたいかに応じて、私は提案するrlikeか、in

SELECT ... FROM <table> WHERE <column name> RLIKE "^id1|id2|id3$"

これにより、これら3つの用語のいずれかを含むセルが見つかります

または使用

SELECT ... FROM <table> Where <column name> IN ('id1','id2','id3')

これにより、これら 3 つのうちの 1 つに等しいセルが検索されます。

于 2012-09-14T22:25:08.770 に答える