sql >> Database >  >> RDS >> Mysql

Een lijst doorgeven aan de MySQL-opgeslagen procedure en controleren of ALLE waarden aanwezig zijn

Dit is wat ik tot nu toe heb...

Niet ideaal, maar je kunt hiermee wel de lengte van de items in de string berekenen..

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

Het telt in feite alle komma's in de tekenreeks en gebruikt dat als het totale aantal perms dat is doorgegeven.

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. SQL:Hoe tekenreeks uit te voeren is niet gelijk aan

  2. Fix:"Onbekende tabel 'locales' in information_schema" in MariaDB

  3. MySQL Query om gegevens van vorige week te selecteren?

  4. MariaDB FIELD() vs FIND_IN_SET():wat is het verschil?