با استفاده از تابع 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 نمایش دهید.

توسط پژوهشگر در 201 روز قبل ساعت 03:24
دسته بندی ها: MySQL MySQL for beginner
arman در 201 روز قبل ساعت 06:32

برای هر ردیف از جدول 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 اختصاص دهید. در صورت تمایل می‌توانید شرطی اضافه کنید تا فقط ردیف‌هایی که حداقل یک مجوز فعال دارند بازگردانید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری