Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przekazanie listy do procedury składowanej MySQL i sprawdzenie obecności WSZYSTKICH wartości

Oto, co mam do tej pory...

Nie jest to idealne rozwiązanie, ale możesz w ten sposób obliczyć długość elementów w ciągu...

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

Zasadniczo liczy wszystkie przecinki w ciągu i używa ich jako całkowitej liczby przekazanych uprawnień.

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. Łączenie w łańcuchy orX w konstruktorze zapytań Doctrine2

  2. Laravel Eloquent kontra konstruktor zapytań — dlaczego używać eloquent do zmniejszenia wydajności?

  3. Jak odwrócić kolejność znaków w ciągu znaków w MySQL

  4. TIMEDIFF() Przykłady – MySQL

  5. Jak stworzyć sekwencję w MySQL?