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

3 روز پیش توسط محمدحسن یگانه آپدیت شد
آفلاین
user-avatar
حسین شیری نژاد ( 65406 تجربه )
4 روز پیش
تخصص : برنامه نویس

لینک کوتاه اشتراک گذاری

0

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

بهترین پاسخ
آفلاین
user-avatar
محمدحسن یگانه
4 روز پیش

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

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

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

آفلاین
user-avatar
majid jalilian ( 1150 تجربه )
4 روز پیش
تخصص : توسعه دهنده

لینک کوتاه اشتراک گذاری

0

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

آفلاین
user-avatar
حسین شیری نژاد ( 65406 تجربه )
4 روز پیش
تخصص : برنامه نویس

لینک کوتاه اشتراک گذاری

0

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

آفلاین
user-avatar
محمدحسن یگانه ( 119417 تجربه )
4 روز پیش
تخصص : Full-Stack Web Developer Freelancer

لینک کوتاه اشتراک گذاری

1

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

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

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

آفلاین
user-avatar
حسین شیری نژاد ( 65406 تجربه )
3 روز پیش
تخصص : برنامه نویس

لینک کوتاه اشتراک گذاری

0

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

آفلاین
user-avatar
حسین شیری نژاد ( 65406 تجربه )
3 روز پیش
تخصص : برنامه نویس

لینک کوتاه اشتراک گذاری

0

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

آفلاین
user-avatar
محمدحسن یگانه ( 119417 تجربه )
3 روز پیش
تخصص : Full-Stack Web Developer Freelancer

لینک کوتاه اشتراک گذاری

1

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

برای ارسال پاسخ لازم است، ابتدا وارد سایت شوید.