حسین شیری نژاد
3 سال پیش توسط حسین شیری نژاد مطرح شد
6 پاسخ

جستجو در چند جدول

سلام و روز بخیر
میخوام تو چند تا جدول که ارتباطی با هم ندارن و چند تا فیلد مشترک تو هر کدومشون هست سرچ همزمان انجام بدم
مثلا تو هر 3 تا جدول دوتا فیلد مشترک هست به نام های title , description و بعد سرچ میخوام این نتایج به صورت صفحه بندی شده در قالب یه متغییر بهم داده بشه تا با یه حلقه بشه پیمایشش کرد.
ممنون میشم مهندسین راهنمایی کنن
@hesammousavi


ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش مطرح شد
1

به نظرم یکی از بهترین راهکارها در چنین مواقعی استفاده از Unions باشه:
https://laravel.com/docs/8.x/queries#unions

بصورت خلاصه کارش اینه که خروجی چندتا کوئری رو زیر هم قرار میده... بر خلاف join که کنار همدیگه قرار می‌گیرند. فقط توجه داشته باشد که چندتا شرط برای استفاده از unions وجود داره. مثلا اینکه باید تعداد ستون های این کوئری ها با هم مساوی باشند تا بشه نظیر به نظیر زیر هم قرار بگیرند.

راهکار بالا در لایه دیتابیس انجام میشه و از نظر سرعت و بهره وری خیلی بهتر هست. ولی اگر تعداد رکوردهاتون چندان زیاد نیستند یا براتون اهمیت زیادی نداره این قضیه، می‌تونید تو لایه لاراول و با استفاده از collection ها این کار رو انجام بدید. یعنی کوئری هاتون رو بصورت جداگانه و مستقل اجرا می‌کنید. خروجی هر کدومشون رو داخل یک متغیر از نوع Collection میریزید و بعد از انجام تغییراتی مثل sort و map و ... اگر نیاز بود در نهایت می‌تونید روی همون paginaiton هم اجرا کنید و تحویل view بدید.


majid jalilian
تخصص : توسعه دهنده
@mjalilian.majid 3 سال پیش مطرح شد
0

من متوجه منظورتون نشدم یعنی بین این table ها هیچ رابطه ای نیست و حتی نمیتونید join کنید؟


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
0

بله رابطه ای بین این جدول ها نیست
@mjalilian.majid


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش مطرح شد
1

به نظرم یکی از بهترین راهکارها در چنین مواقعی استفاده از Unions باشه:
https://laravel.com/docs/8.x/queries#unions

بصورت خلاصه کارش اینه که خروجی چندتا کوئری رو زیر هم قرار میده... بر خلاف join که کنار همدیگه قرار می‌گیرند. فقط توجه داشته باشد که چندتا شرط برای استفاده از unions وجود داره. مثلا اینکه باید تعداد ستون های این کوئری ها با هم مساوی باشند تا بشه نظیر به نظیر زیر هم قرار بگیرند.

راهکار بالا در لایه دیتابیس انجام میشه و از نظر سرعت و بهره وری خیلی بهتر هست. ولی اگر تعداد رکوردهاتون چندان زیاد نیستند یا براتون اهمیت زیادی نداره این قضیه، می‌تونید تو لایه لاراول و با استفاده از collection ها این کار رو انجام بدید. یعنی کوئری هاتون رو بصورت جداگانه و مستقل اجرا می‌کنید. خروجی هر کدومشون رو داخل یک متغیر از نوع Collection میریزید و بعد از انجام تغییراتی مثل sort و map و ... اگر نیاز بود در نهایت می‌تونید روی همون paginaiton هم اجرا کنید و تحویل view بدید.


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
0

سلام و صبح بخیر
من از روش اول استفاده کردم و روش خوبی بود کارمو راه انداخت اما یه ایرادی داره و این است که نوع ابجکتهای خونده شده همشون تبدیل میشن به یه نوع از کلاس یا مدل و من میخوام که مدل های خونده شده بتونن نوع خودشونو حفظ کنن تا بتوانم از متدهای داخل هر ابجکت به درستی استفاده کنم که این خاصیت خودشونو فعلا از دست داده.
@mhyeganeh


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
0

به ناچا از روش دوم استفاده کردم خوب کار میکنه حالا اگه از نظر سرعت کند نباشه روش خوبی هست.
تعداد رکوردها هم زیاد هست و کم نیست فعلا از همین روش استفاده میکنم.
اشکال روش اول که برام پیش اومده اول کامنت براتون نوشتم اگه راحلی براش دارید خوشحال میشم بهم بگین تا از اون روش استفاده کنم.
از پاسخ شما خیلی ممنونم
@mhyeganeh


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش مطرح شد
1

@hosseinshirinegad98
متاسفانه فعلا راهکاری برای این قضیه ای که اشاره کردید به نظرم نمیرسه... ولی اگر چیزی پیدا کردم خبرتون می‌کنم.
موفق باشید.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام