2017-12-10 8 views
-2

権限とコマンドのアクセス権を保持しているデータベーステーブルをMySQLに作成しました。コマンドの権利はpermission_nameのプレフィックスcommand_で始まり、allowed_ranksと呼ばれる余分な列があります。これはINTランクIDのリストです必要な場合は、,文字で分割します。列値の後のすべての数値に更新します(最大9)。

問題は、コマンドのものがそれ以上で、allowed_ranksに1つのIDを入れました。command_で始まる列のすべてのものをループして、1つのIDであるallowed_ranksを変更する方法はありますか?それから9までのあらゆる数字に? 9は最大ランクIDです。

私はすでにクエリの一部を行っていますが、私は更新の仕方がわかりません。

UPDATE permission_rights` SET `allowed_ranks` = '?' WHERE `permission_name` LIKE 'command_%'; 

9までの列の値の後にどのように数値を更新すればよいですか?だから私はこの記録を持っていると言うことができます...私はあなたが何を意味するかを確認するためのちょっとした例です。

| permission_name | allowed_ids | 
---------------------------------- 
| command_hello | 2 
| command_junk | 5 
| command_delete | 8 
| command_update | 1 

なる...

| permission_name | allowed_ids | 
---------------------------------- 
| command_hello | 2,3,4,5,6,7,8,9 
| command_junk | 5,6,7,8,9 
| command_delete | 8,9 
| command_update | 1,2,3,4,5,6,7,8,9 
+1

を使うのでしょうか? allowed_idsのリストがどこから来るのかは不明です –

答えて

0

より良いアプローチは、数生成器(1からnまでの番号を生成するいくつかの方法)を使用することであろうが、一般的なMySQLはそのような能力を有していません。

MariaDBを使用している場合は、回答者:O.Jonesのhereとしてseq_1_to_1000を使用することができます。ご利用の場合は単純であるように思わしかしあなたは最高ランクが9であることを言ったので、あなたがサンプルデータであなたのDB構造を投稿することができます

、私はちょうど

update a 
set a.allowed_ids = RIGHT('1,2,3,4,5,6,7,8,9',19-2*a.allowed_ids) 
where a.permission_name like 'command_%' 
関連する問題