Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Melewati daftar ke prosedur tersimpan MySQL dan memeriksa SEMUA nilai ada

Inilah yang saya dapatkan sejauh ini...

Tidak ideal, tetapi Anda dapat menghitung panjang item dalam string dengan ini..

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

Ini pada dasarnya menghitung semua koma dalam string dan menggunakannya sebagai jumlah total perm yang diteruskan.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menginstal MySQL-python

  2. Kesalahan aneh dan mengganggu:Panggil ke fungsi yang tidak ditentukan mysql_query()

  3. MySQL GROUP BY DateTime +/- 3 detik

  4. mysql:Tidak bisakah kita membuat pemicu pada tabel sistem?

  5. Bekerja dengan Acara di MySQL