با استفاده از تابع FIND_IN_SET در MySQL، یک پرسوجو بنویسید که همه ردیفهای جدول articles را که ستون tags آنها شامل مقدار 'sql' (لیست جداشده با کاما) است انتخاب کند.
9.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:19 0.0
تابع FIND_IN_SET(needle, haystack) موقعیت یک رشته را در یک لیست جداشده با کاما برمیگرداند (اندیس ۱ به بالا) و در صورت نبودن مقدار، مقدار ۰ میدهد؛ بنابراین معمولاً از شرطی مانند WHERE FIND_IN_SET('sql', tags) > 0 استفاده میشود. توجه داشته باشید که مقادیر در ستون باید دقیقاً با کاما جدا شده و بدون فاصله باشند؛ در صورت نیاز میتوانید از REPLACE(tags,' ','') برای حذف فاصلهها استفاده کنید و برای کارایی بلندمدت ساختار داده را نرمالسازی (جداسازی به جدول مرتبط) کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای یافتن وجود 'sql' در لیست جداشده با کاما در ستون tags، معمولاً از FIND_IN_SET('sql', REPLACE(tags, ' ', '')) > 0 استفاده میشود تا فاصلهها نادیده گرفته شوند. به این نکته توجه کنید که FIND_IN_SET به طور عمومی ایندکسپذیر نیست و روی جداول بزرگ میتواند کارایی را کاهش دهد. برای کارایی بلندمدت، طراحی پایگاه داده را نرمالسازی کنید و از یک جدول مربوط به برچسبها (tag) با جدول میانی مانند article_tags استفاده نمایید تا امکان جستجوی سریع با ایندکس وجود داشته باشد. یا اگر همچنان از لیست جداشده با کاما استفاده میکنید، میتوانید یک ستون GENERATED که مقدار پاکسازیشده tags را در خود دارد بسازید و روی آن ایندکس بگذارید تا پرسوجو سریعتر گردد.
گزارش