sql >> データベース >  >> RDS >> Mysql

リストをMySQLストアドプロシージャに渡し、すべての値が存在することを確認します

    これは私がこれまでに得たものです...

    理想的ではありませんが、これで文字列内のアイテムの長さを計算できます。

    (SELECT LENGTH(permissions) - LENGTH( REPLACE(permissions, ',', '') ) + 1)
    

    基本的に、文字列内のすべてのコンマをカウントし、それを渡されたパーマの総数として使用します。

    CREATE PROCEDURE has_permission( IN account_id BIGINT, IN permissions TEXT)
    BEGIN
      SELECT DISTINCT account_id
      FROM   pp_acl_user_roles ur, pp_acl_role_permissions rp
      JOIN pp_acl_permissions p ON rp.permission_id=p.id
      WHERE (
        ur.account_id = account_id
        #check for permission ids OR keys depending on what has been passed in.
        AND ( FIND_IN_SET(p.id, permissions) OR FIND_IN_SET(p.key, permissions) )
        AND ur.role_id = rp.role_id
    
      )
      #ensure we have ALL the permissions we asked for, not just some -makes IN() an AND not an OR.
      GROUP BY ur.account_id
      HAVING COUNT(DISTINCT rp.permission_id) = (SELECT LENGTH(permissions) - LENGTH( REPLACE(permissions, ',', '') ) + 1);
    



    1. コンテナオーケストレーションツールを使用せずにMariaDBGaleraクラスターを実行する:パート1

    2. PL/SQLのUPDATEの影響を受ける行数

    3. FNDCPASS&AFPASSWD

    4. PHP / mysqlは、UPDATEステートメントの影響を受ける行の数を取得します