2011-12-05 10 views
-1

私はこのシナリオを持っています: テーブルtable 1と呼ばれ、groupsという名前のテーブル。 Iその列現在、私はこれをやっている私は分割し、その後、変数myGroupSQLセルを分割して後で文字列を比較することは可能ですか?

と比較する必要があるグループの範囲があります。

myGroup = 32 
trueGroup = false 

sql = "select * from table1 where groups like '%" & myGroup & "%'" 
set rs = conn.execute(sql) 

if not rs.eof 
    do until rs.eof 
    title = rs("title") 
    groups = rs("groups") 
    groupsSplitted = split(groups, ",") 

    for i = lbound(groupsSplitted) to ubound(groupsSplitted) 
     if cint(myGroup) = cint(groupsSplitted(i)) then 
     trueGroup = true 
     end if 
    next 

    if trueGroup 
     response.write(title) 
    end if 
    next 
end if 

それはSQLラインですべてを行うことは可能ですか? :)

+0

適切に設計されたテーブル構造では、グループがレコードごとに1つのグループに分割され、このような分割を行う必要は全くありません。言い換えれば:あなたのテーブル構造を修正すれば、この問題は解消されます:http://en.wikipedia.org/wiki/Database_normalization –

答えて

4

データを正規化します。単一のフィールドに複数の値を持つ


(カンマ区切り、またはそうでなければ)悪いアンチパターンです。オプティマイザがインデックスを使用しないようにすることでパフォーマンスが損なわれ、クエリの書き込みや保守が困難になります。あなたも、その後も制約を強制することができます...あなたのクエリが簡略化されてその後...多くの関係

SELECT title_id FROM map_title_to_group WHERE group_id = ? 

CREATE TABLE map_title_to_group (
    title_id INT, 
    group_id INT, 
    PRIMARY KEY (group_id, title_id) 
) 

を..:

代わりに、1を持っているあなたのスキーマを変更
- title_idタイトルのテーブルに外部キー
- group_idグループの外部キーにグループ化されています。

+0

これは舌で尋ねる質問になるだろうが、今私は実際に興味があります...「悪い反パターン」とは対照的に、「良い反パターン」のようなものがありますか?トピックをさまようためのお詫び。 –

+0

@JonP - 良い点、私は「良い反パターン」はないと言うでしょう:) [http://en.wikipedia.org/wiki/Anti-pattern] – MatBailie

関連する問題