sql >> Database teknologi >  >> RDS >> Mysql

Send en liste ind i MySQL-lagret procedure og kontroller, at ALLE værdier er til stede

Dette er, hvad jeg har fået indtil videre...

Ikke ideelt, men du kan beregne længden af ​​emnerne i strengen med denne...

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

Den tæller dybest set alle kommaerne i strengen og bruger det som det samlede antal perms, der er sendt ind.

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. Sådan får du information om kompileringsfejl i Oracle/TOAD

  2. PostgreSQL BESKRIV TABEL Tilsvarende

  3. Hvordan får man mysqli til at kaste undtagelser ved hjælp af MYSQLI_REPORT_STRICT?

  4. Hvordan viser jeg kun 5 poster pr. side fra min mysql-databasetabel gennem paginering?