私はグループごとに格納されている連絡先のリストを取得する小さなプロジェクトに取り組んでいます。基本的に、データベースは、各グループがGroup.PrimaryとGroup.Secondaryとして記憶されているプライマリとセカンダリの連絡先を持つように設定されています。目的は、各グループのすべてのプライマリとセカンダリの連絡先を引き出し、並べ替え可能なテーブルに表示することです。MySQLクエリの列のような列
私はすべてのソート可能なテーブルを持っているが働いたが、私は小さな問題に遭遇してきました。各プライマリフィールドとセカンダリフィールドには、複数の連絡先をコンマで区切って指定することができます。プライマリが123256が含まれている場合たとえば、それは私がこのような形式にクエリを使用することを意図していたIDが123と256とのコンタクトの両方プルする必要があります:私はちょうどコンマ部分をスキップすることができるように
SELECT *
FROM Group G,
Contacts C
WHERE G.Primary LIKE %C.ID%
OR G.Secondary LIKE %C.ID%
を、しかし、私はこれのために動作するクエリを見つけることができないようです。
あなたに私の質問は、私はここで何かを見落としていますか?私にこれをさせる簡単なクエリはありますか?あるいは、私はグループと連絡先を別々に取得することをお勧めします。私は前者が読んだときに少し分かりやすいと思います。これは共有プロジェクトなのでプラスですが、それが不可能な場合は後者を行います。
このコードは簡略化されていますが、ポイントを取得します。
データベース内に1対多の関係があります。 1つのグループには1つ以上の連絡先が関連付けられています。ほとんどの人は、groupidとcontact idの組み合わせを含む余分なテーブルを追加することでこれを解決します。このようにして、通常の結合を使用して、グループと関連付けられたすべての連絡先を取得できます。追加の利点は、毎回コンマ区切りの値を持つ文字列を '解析する'よりもずっと速いということです。 – Gerben
悲しいことに、残念ながら、それは従来のデータベースであり、あまりにも多くのシステムが構造を変更するためにそれに依存しているので、そのまま維持する必要があります。私はここで解決策を試し、私は何が起こるか見る。 – shmeeps