2011-07-11 5 views
0

リソースを含むテーブルを保持しているケースがあります。このテーブルには、ロールIDがカンマで区切られた値として格納されているvarcharカラムがあります(正規化する必要がありますが、長時間実行している作業システムを変更することはできません)。例えば。 role_ids列には「1,4,6,9,10」が含まれ、別の行には「5,10,15」が含まれます。INTを含む列の指定されたINTを含む行のリストをカンマ区切り値として見つける方法

次に、システム内のユーザーの場合、関連する役割IDがリストとして表示されます。 4,15。今では、「任意のもの」、つまりresource.role_ids列にあるロールIDのいずれかを持つリソースを見つける必要があります。

この質問は、this oneと似ていますが、Grailsでは予期された解決策が期待できません。

私は、クエリまたはストアドプロシージャのいずれかのMySQLソリューションを探しています。 'FIND_IN_SET()'を使用してリソースのセットを見つけることはできましたが、各ユーザーのrole_idリストで複数のDBを呼び出す必要はありません。

+3

SHOULDは十分に強くなく、「長時間稼働している作業システムを変更できません」ということは、おそらく思ったよりも効果が少ないと思われます。これは、最初からコードからその悪いデザインを削除することに費やす過ごすよりも、長期間にわたってハッキングしたり、問題を修正したり、このようなことをしようとする、ずっと長い時間を費やすような厄介な問題とデザインです。実際のシステムではありますが、もっと良い解決策を投じるつもりはないと思いますので、計画し、実装し、テストする必要があります。私からの非常に非常に非常に強い推薦。 [さらに、それはちょうどいくつかのテーブルのように見えます] –

答えて

1

リストを個別のレコードに変換し、すべて正常に結合する場合は、this oneのような関数を使用します。

関連する問題