1

助けが必要です。私はこのデータベースを持っています。このデータベースには、次のフィールドとその尊重値があります。

agency_id | hostess_id
3         | 12-4-6
5         | 19-4-7
1         | 1

hostess_id には、その Agency_id に関連付けられているが「-」で区切られたすべてのホステス ID が格納されます。

さて、私はホステスとしてログインし、id=4 を持っています。id=4 を含むすべての Agency_id を取得する必要があります。like 演算子ではこれを実行できません.. hostess_id 行を保存して実行しようとしました配列に変換して内破しますが、このように解決できません。

どうぞ、何かアイデアをお願いします。

4

2 に答える 2

1

まず、これは正規化する必要があるひどいデータベース設計であるという@JvdBergに完全に同意します。

ただし、データベースのレイアウトを変更する方法がなく、これを SQL で解決する必要があることを少し考えてみましょう。非効率的ですが有効なソリューションは次のようになります。

select agency_id from tablename where
  hostess_id LIKE '4-%' OR
  hostess_id LIKE '%-4-%' OR
  hostess_id LIKE '%-4'

ホステス ID 4 のすべての代理店を検索していた場合。これを sqlfiddle で作成して、より徹底的に説明しますhttp://sqlfiddle.com/#!2/09a52/1

ただし、部分文字列一致のインデックス構造はめったに使用されないため、この SQL ステートメントを最適化するのは難しいことに注意してください。非常に短い ID リストの場合は問題なく動作します。テーブル構造を変更する可能性がある場合は、@JvdBerg が提案したようにスキーマを正規化し、Google でデータベース設計と通常のフォームを調べてください。

于 2012-09-29T14:48:12.190 に答える
1

データベースの設計を変更する必要があります。あなたが説明しているのは、典型的な N:N 関係です

代理店:

agency_id | name
3         | Miami
5         | Annapolis
1         | New York

ホステス

Hostes_id | name
4         | Helen
12        | May
19        | June

エージェンシーホスト

Hostes_id | agency_id
4         | 1
4         | 3
4         | 5
12        | 1
12        | 3
19        | 1
于 2012-09-29T11:30:36.627 に答える