Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chuyển một danh sách vào thủ tục lưu trữ MySQL và kiểm tra TẤT CẢ các giá trị hiện có

Đây là những gì tôi có cho đến nay ...

Không lý tưởng, nhưng bạn có thể tính độ dài của các mục trong chuỗi bằng cách này ..

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

Về cơ bản, nó đếm tất cả các dấu phẩy trong chuỗi và sử dụng nó làm tổng số phần trăm được chuyển vào.

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. Làm cách nào để thay đổi một cột và thay đổi giá trị mặc định?

  2. Làm cách nào để hủy tất cả các quy trình trong danh sách quy trình hiển thị Mysql?

  3. Tạo tên người dùng duy nhất từ ​​họ và tên?

  4. Làm cách nào để trả về loại trường từ truy vấn MySQL?

  5. Tự động chọn một cột trong MySQL