با استفاده از تابع BIT_COUNT در MySQL، برای هر سطر جدول users ستون flags را بررسی کن و تعداد بیتهای 1 را بهعنوان ستون ones نمایش بده و فقط سطرهایی را برگردان که ones >= 3.
1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:22 0.0
با استفاده از تابع BIT_COUNT میتوانید تعداد بیتهای 1 در مقدار صحیح را محاسبه کنید. مثلاً یک پرسوجو ساده: SELECT flags, BIT_COUNT(CAST(flags AS UNSIGNED)) AS ones FROM users WHERE BIT_COUNT(CAST(flags AS UNSIGNED)) >= 3; توجه کنید که اگر ستون ممکن است NULL یا نوع غیرصحیح داشته باشد از CAST/CONVERT برای تبدیل به UNSIGNED استفاده کنید و برای بهبود عملکرد در پرسوجوهای بزرگ میتوانید مقدار محاسبهشده را در ستون محاسباتی (generated column) یا ستون جداگانه ذخیره کنید تا استفاده از تابع در WHERE موجب چشمپوشی از ایندکس نشود.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
BIT_COUNT تعداد بیتهای 1 در مقدار صحیح را میشمارد و وقتی از CAST(flags AS UNSIGNED) استفاده کنید نتیجهای معتبر میگیرید. برای جداول بزرگ، به جای محاسبه در WHERE از یک generated column یا ایندکس بر روی BIT_COUNT (یا یک expression index) استفاده کنید تا شرط ones >= 3 سریع باشد. اگر امکان NULL وجود دارد، با COALESCE(CAST(flags AS UNSIGNED), 0) آن را به 0 تبدیل کنید تا همه ردیفها به درستی ارزیابی شوند. همچنین توصیه میشود نوع ستون flags را unsigned نگه دارید یا آن را به UNSIGNED تبدیل کنید تا از خروجیهای نامشخص جلوگیری شود.
گزارش