با استفاده از تابع MAKE_SET در MySQL یک پرسوجوی SELECT بنویسید که برای هر ردیف جدول users ستون id و لیستی از نامهای مجوز ('read','write','delete') را بر اساس مقدار بیتماسک موجود در ستون permissions برگرداند.
5.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:24 0.0
برای حل این مسئله از تابع MAKE_SET(permissions,'read','write','delete') استفاده کنید؛ این تابع با توجه به بیتهای عدد permissions (bit 1 متناظر با 'read'، bit 2 با 'write' و bit 3 با 'delete') رشتهای از مقادیر را جداشده با کاما بازمیگرداند. پیشنهاد میشود در صورت امکان مقدار permissions را با CAST یا COALESCE به عدد تبدیل کنید تا مقادیر NULL یا نوع نامناسب باعث خطا نشوند و نتیجه را با یک alias مثل permission_list نمایش دهید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای هر ردیف از جدول users از MAKE_SET( CAST(COALESCE(permissions,0) AS UNSIGNED), 'read','write','delete') استفاده کنید تا لیستی از نامهای مجوز بر اساس بیتهای permissions به دست آید. بیتهای 1، 2 و 3 متناظر با 'read'، 'write' و 'delete' هستند و MAKE_SET نتیجه را با جداکنویی کاما بازمیگرداند. با این روش از بروز خطاهای NULL یا نوع نامناسب با استفاده از COALESCE و CAST جلوگیری میکنید و خروجی را به alias مانند permission_list اختصاص دهید. در صورت تمایل میتوانید شرطی اضافه کنید تا فقط ردیفهایی که حداقل یک مجوز فعال دارند بازگردانید.
گزارش