عرفان همتی
5 سال پیش توسط عرفان همتی مطرح شد
11 پاسخ

دیتابیس فروشگاهی بخش ویژگی محصول و تغییر قیمت نسبت به ویژگی

با سلام خدمت دوستان عزیز.
بنده شروع کردم که دیتابیس یه سیستم فروشگاهی رو تحلیل کنم.
ولی تو یه بحثی به مشکل برخودم.
بخش ویژگی محصولات به صورت داینامیک هستش.
چطوری میشه کاری کرد که قیمت محصول ( اضافه کردن یا کم کردن ) نسبت به ویژگی انتخاب شده، متغیر باشه ؟
مثلا قیمت پیراهن سایز X با قیمت پیراهن سایز XL تفاوت داشته باشه...
یا مثلا نسبت به رنگ محصول قیمت نیز تغییر داشته باشه...
و اینکه چطور بتونیم، موجودی پیراهن سایز X و موجودی پیراهن سایز XL رو هم داشته باشیم...

@ali.bayat
@Alimotreb
@hesammousavi
@milad
@khanzadimahdi
@endworld


ثبت پرسش جدید
Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
0

سلام
@mrerfan.ir

اگر محصولات به این شکل هست
به نظر میشه یه جدول در نظر گرفت که قابلیت هایی یا ویژگی هایی مثل
XL
L
رنگ
و ...
اینا رو با یه ضریبی در نظر گرفت
شما تو محصولاتت پیرهن داری قیمتش 2 هزار تومنه ، اگر xl بود قیمت در ضریبش که به فرض 2 هست ضرب بشه ، بشه 4 هزار تومان
اگر سفید بود ضریب 3 یعنی ، یه پیرهنی که هم XL هست و هم سفید میشه چند ؟ 12 هزار تومان!

اینطوری میتونید اوکی کنید


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
0

سه تا جدول باید داشته باشید

جدول محصول
جدول ویژگی
جدول رابط بین محصول و ویژگی

قیمت ها رو درون جدول رابط ثبت کنید. (به دو روش میشه عمل کرد که در زیر توضیح دادم)

مثلا محصول ۱ با ویژگی ۵ رابطه داره و در این رابطه قیمتش میشه ۵ تومن
و محصول ۱ باز با ویژگی ۱۰ رابطه داره و قیمتش میشه ۱۰ تومن

روش بهتر:
البته اگه رابطه ها چند به چند هست بهتره یه قیمت کلی برای محصول در نظر بگیرید و به ازای هر ویژگی یه قیمت متغیر داشته باشید که به قیمت اصلی اظافه بشه (اینجوری بهتره)

مثلا محصول ۱ قیمتش ۱۰۰ تومن هست اما وقتی که کاربر ویژگی ۲ رو برای این محصول انتخاب میکنه توی جدول واسط یه قیمت بزارید . اگه قیمت توی جدول واسط موجود بود با قیمت اصلی جمع بشه و اگه نبود که قیمت محصول تغییری نمیکنه


عرفان همتی
تخصص : Backend Developer
@erfanhemmati 5 سال پیش مطرح شد
0

@khanzadimahdi
فرمایش شما صحیح.
ولی طبق گفته شما چطوری میشه موجودی اون محصول رو هم مدیریت کرد ؟
ممنون میشم اگه راهنماییم بکنید.


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش آپدیت شد
0

موجودی کل محصول رو درون جدول محصول نگهداری کنید و موجودی هر کدوم از ویژگی ها رو درون جدول خودشون قرار بدید.

یه فیلد دیگه هم درون هر جدول داشته باشید به نام تعداد خرید. به ازای هر خرید اون فیلد رو یکی بالا ببرید. موقعی که برابر با موجودی شد یعنی همه اجناس رو فروختید.


حسین ستاری
تخصص : برنامه نویس
@Ho3ein 4 سال پیش مطرح شد
0

درواقع منظور دوست عزیزمون این هست که اگر محصولی به عنوان پیراهن تعریف شد و این پیراهن 2 عدد با سایز xl در رنگ های قرمز و سبز بود رو چطوری میشه کنترل و تعریف کرد T

حالا بر فرض فروشگااه چند منظوره باشه ، چطور میشه برای یک لپتاپ تفاوت قیمت گارانتی دار در رنگ قرمز و بدون گارانتی در رنگ سفید رو پیاده کرد

منم نمیدونم 😁😁😁😁

@hesammousavi اقای موسوی به فریادمون برس ....


کیان صادقی
تخصص : کار‌آموز برنامه نویسی بک اند
@kian.sdi.0028 3 سال پیش مطرح شد
0

@Ho3ein
@erfanhemmati
آقا من امروز به این چالش برخوردم
دیدم شما ۵ ماه پیش راجع بهش بحث کردید گفتم شاید تا الان راهشو یافته باشید اگر اینطور هست ممنون میشم به منم یه راهنمایی بدید


رافق مجتهدزاده
تخصص : برنامه نویسی php
@rafig 3 سال پیش مطرح شد
0

آقا منم امروز به این چالش برخوردم
دیدم شما 4 ماه پیش راجع بهش بحث کردید گفتم شاید تا الان راهشو یافته باشید اگر اینطور هست ممنون میشم به منم یه راهنمایی بدید


امین محمدزاده
تخصص : برنامه نویسی وب - Laravel
@amin.webdesign 3 سال پیش آپدیت شد
1

چاره کار شما دست منه. 😁😁😁
الزاما قرار نیست به کار به صورت خیلی پیچیده نگاه کرد. اینکه دوستانی که راهنمایی میکنن کلی گویی هست و با مشخص کردن صرفا تعداد دیتابیس نمیشه مشکلی رو حل کرد.
خب راه حل چیه؟ راه حل بر حسب استراتژی هر شخص برنامه نویس میتونه متفاوت باشه و مدلهای خیلی زیادی رو میشه برای این حالت پیاده سازی کرد.
روشی رو بهتون میگم که بتونید خیلی راحت این موضوع رو برای خودتون حل کنید. الزاما روشی که میگم بهترین راه حل نیست ولی از بین چندین الگویی که قبلا طراحی کردم این راحت تر هست.
شما دو تا جدول نیاز دارید که یکی products هست و یکی هم productvariants که این دو تا جدول از طریق id در جدول products به productid در جدول productvariants متصل میشه
جدول قیمتگذاری و مدیریت تعداد هر محصول/ویژگی جدول productvariants هست.
شما برای هر محصولتون چند تا ویژگی دارید که میتونه در آن واحد هر محصول بر اساس دو تا ویژگی از بقیه محصولات جدا بشه. مثلا:
تی *** (آبی / L -- آبی / XL - آبی / M ) - (قرمز / L -- قرمز / XL - قرمز / M ) که هر کدام هم تعداد مشخص خودشون رو دارن.
خب هر کدوم از ویژگی هایی که بالا نوشتم به عنوان یک ردیف در دیتابیس قرار میگیرن.
آبی / L - تعداد 2 - قیمت 100000
آبی / XL - تعداد 5 - قیمت 110000
آبی / M - تعداد 0 - قیمت 100000
قرمز / L - تعداد 4 - قیمت 98000
قرمز / XL - تعداد 7 - قیمت 99000
قرمز / M - تعداد 1 - قیمت 105000

بعد از اینکه داده هارو بر این اساس در دیتابیس ذخیره کردید میتونید این ویژگی هارو توی صفحه محصول به صورت select box نمایش بدید و کاربر با انتخاب هر کدوم بتونه قیمتش رو ببینه که حالا این قسمت رو بر حسب سلیقه خودتون میتونید طراحی و برنامه نویسی کنید.
حتی به راحتی میتونید برای هر کدوم از ویژگی ها قیمت فروش ویژه و تاریخ شروع و انقضای فروش ویژه تعریف کنید.


مصطفی
تخصص : برنامه نویس
@mostafanori 3 سال پیش مطرح شد
1

@amin.webdesign
تو این روش مثلا ویژگی های دیگه مثل وزن و ... هم باشن یعنی هی شما میخوای ستون اضافه کنی به جدول؟؟؟


امین محمدزاده
تخصص : برنامه نویسی وب - Laravel
@amin.webdesign 3 سال پیش مطرح شد
2

@mostafanori
مگه قراره چند تا ویژگی توی قیمت گذاری محصول دخیل باشه؟ همین دیجی کالا به ندرت دو تا ویژگی توی قیمت گذاری محصولاتش تاثیر میذاره. یکیش رنگه و یکی هم سایز هست. در ثانی من این روشی که گفتم یه ستون در نظر گرفتم برای ویژگی ها. یعنی عنوان تلفیقی ویژگی ها توی یه ستون قرار میگیره.


مصطفی
تخصص : برنامه نویس
@mostafanori 3 سال پیش آپدیت شد
3

من جدول هام رو اینطوری درست میکنم . شاید به درد کسی بخوره:

### products:

-id
-title
-slug
-parent_id
-is_variation
-quantity
-original_price
-discount_price

نکته : هر ستون دیگه ای دوست داشتید میتونید به جدول محصولات اضافه کنید. البته خود من معمولا یه جدول meta درست میکنم و اطلاعات اضافی رو به صورت key , value اونجا ذخیره میکنم . اگر پکیج لاراول هم بخواید من از zoha/laravel-meta استفاده میکنم
ستون isvariation هم خیلی مهم . اینجا به صورت صفر و یک تعیین میکنیم که محصول ما متغییر هست یا ساده است . کسایی که وردپرس کار کردن بهتر متوجه میشن


### attributes:

-id
-title
-slug

یه جدول واسط هم برای ارتباط بین محصولات و ویژگی ها لازم داریم . البته باید حواسمون باشه هر کدوم از این ارتباط ها نیاز به تعداد و قیمت و شناسه محصول و ... مخصوص خودش داره . مثلا (مداد قرمز کوچک) قیمتش و تعدادش و ... قطعا با (مداد قرمز بزرگ) فرق میکنه

### product_attributes:

-id
-product_id
-attribute_id
-original_price
-discount_price
-value
-quantity

در جدول بالا یه مشکلی که هست اینکه مقداری که به ویژگی مثلا رنگ میخواد ادمین اختصاص بده هر دفعه باید تایپ کنه (قرمز) . اگر میخواید مثل وردپرس مثلا ویژگی قرمز رو که add کردید و خواستید برای محصولتون مقدار تعیین کنید، خودش بهتون پیشنهاد بده ، میتونید دو جدول دیگه به اسم های valueو attribute_values درست کنید و مقادیری که برای هر ویژگی محصول ست میکنید ، اونجا هم ذخیره کنید که وقتی خواستید محصول بعدی رو ایجاد کنید ، بعد افزودن ویژگی رنگ ، اتوماتیک رنگ های استفاده شده و ذخیره شده رو بتونید نمایش بدید به ادمین که انتخاب کنه بجای اینکه تایپ کنه و ... مشکلات خودش به وجود بیاد ( مثلا یه بار مقدار <ابی> برای رنگ ست شده یه بار <آبی> ست شده . چون هربار باید تایپ کنه ممکنه تایپ های مختلف مقادیر مختلف ذخیره بشه که احتمالا بعدا تو فیلتر درست کردن با مقادیر و ... به مشکل میخورید) . پس اگر این کاری که گفتم رو کردید بجای ستون value از ستون value_id باید استفاده کنید

پس موقع نمایش محصول و ... اول کار چک کنید محصول ساده است یا متغیر . اگر متغییر بود مستقیم با جدول product_attribute کار دارید . حواستون باشه بعد از اینکه کاربر از درگاه برگشت حتما از تعداد مثلا محصول ( مداد قرمز کوچک) یه دونه کم کنید که تعداد به روز بمونه.


### values:
-id
-title
-slug

### attribute_values:
-id
-attribute_id
-value_id
-order_number

البته خیلی کارای دیگه میشه کرد. به نظرم این ساده ترین حالت ممکن هست که بتونیم از این جدول ها جاهای دیگه مثل فیلتر ها هم استفاده کنیم


خب الان همچنان یه مشکلی داریم . اینکه چندتا ویژگی نمیتونیم داشته باشیم برای یه محصول . برای این کار من مثل وردپرس عمل میکنم . یعنی ابتدا یه محصول میسازم که آی دی اون ۱ میشه . بعد یسری ویژگی دارم . موقع ساخت ویژگی باید یه تیک بزارم که ادمین تعیین کنه (استفاده به عنوان متغیر) . حالا موقع ایجاد محصول ادمین اگر خواست محصول متغیر ایجاد کنه ، به ازای هر متغییری که میزنه تصویری شبیه زیر باید ببینه :
توضیح تصویر رو وارد کنید

به ازای هر سطری که در بالا ادمین ایجاد میکنه من یک محصول ایجاد میکنم که parentid براش در نظر میگیرم و اون رو برابر آی دی محصول اصلی قرار میدم

هر کدام از سطرهای عکس بالا هم دقیقا انگار یه محصول جدا هستند . چون اگر هرکدوم رو باز کنه ادمین باید بتونه براش قیمت ، قیمت تخفیف خورده ، تعداد ، کد منحصربه فرد و .... تعیین کنه (یعنی ما یه محصولی داریم که چندین قیمت و چندین قیمت تخفیف خورده و ... میخواد داشته باشه) .
توضیح تصویر رو وارد کنید
این اطلاعات اضافه باید در جدول product_meta ذخیره بشه برای هر محصول:

-id
-product_id
-meta_key
-meta_value

خلاصه:
یه جدول ویژگی داریم که باید اول از همه ویژگی ایجاد کنیم . هنگام ایجاد باید مشخص باشه که قرار هست برای متغیر ها استفاده بشن یا نه
حالا ادمین میاد محصول ایجاد کنه . باید یه جایی تیک بزنه که میخوام محصولم متغیر باشه . نمیخوام ساده باشه ( اگر ساده خواست که فقط یه نوع دیتا داریم و همیش مستقیم تو جدول products ذخیره میشه) . وقتی تیک محصول متغییر رو زد ، باید هر چندتا متغییر که خواست بتونه ایجاد کنه . هر متغییر هم مثل یک محصول جدا باید براش داخل جدول products سطر جدید ایجاد بشه و parentid محصول اصلی براش در نظر گرفته بشه و تمام اطلاعات اضافی از قبیل قیمت و قیمت تخفیف خورده و تعداد و عکس و ... باید در جدول productmeta ذخیره بشه


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

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