با استفاده از تابع FIND_IN_SET در MySQL یک پرسوجو بنویسید که تمام رکوردهای جدول products را که مقدار 'red' در ستون colors (مقادیر جداشده با کاما) وجود دارد، برگرداند.
8.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:50 0.0
برای حل این مسئله از تابع FIND_IN_SET استفاده کنید: مثلاً SELECT * FROM products WHERE FIND_IN_SET('red', colors) > 0; توجه داشته باشید که آرگومان دوم باید رشتهای شامل مقادیر جداشده با کاما باشد و تابع اندیس (بزرگتر از صفر) را برمیگرداند. بهعنوان نکات پایگاهدادهای، از نبود فاصلهها در مقادیر جداشده مطمئن شوید و در صورت نیاز برای عملکرد بهتر ساختار داده را نرمالسازی کنید چون جستجو روی رشتههای جداشده قابل ایندکس نیست.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
استفاده از FIND_IN_SET برای مقادیر جداشده با کاما، بهویژه وقتی دادهها نرمالسازی نشدهاند، کارایی مناسبی ندارد و ایندکسسازی روی آن امکانپذیر نیست. حتماً مطمئن شوید که مقادیر بدون فاصله و بهصورت 'red,blue' در ستون colors ذخیره شده باشند. برای بهبود کارایی و توسعه آینده، دادهها را به جدولی مرتبط مانند product_colors با ستونهای product_id و color منتقل کنید و روی آن یک ایندکس ترکیبی ایجاد کنید. همچنین میتوانید از SET یا JSON با طراحی مناسب استفاده کنید، اما FIND_IN_SET همچنان محدود به جستجو در رشتههای جداشده است.
گزارش