راکت

طراحی جدول لایک و دیسلایک و منابع یادگیری دیتابیس

3 پاسخ

سلام دوستان
بنظرتون برای پیاده سازی سیستم لایک/دیسلایک، بهتره که مثلا برای جدول پست ها، بیایم دو تا ستون برای اینها بذاریم ؟ یا کلا یه جدول به اسم likes بسازیم و صرفا با user id و post id و یه ستون برای لایک ( که boolean باشه و لایک و دیسلایک بودنش رو مشخص کنه )، این رو پیاده سازی کنیم
اصلا فرقی زیادی میکنند یا نه ؟ ( منظورم best practice و حالا کارایی و ایناس )

دوستان اگر منابع خوبی ( کتاب، کورس، سایت یا ... ) برای طراحی تخصصی دیتابیس (mysql) میشناسید، ممنون میشم معرفی کنید

ثبت پرسش جدید

پاسخ‌ها

3
محمد معین بابائی
محمد معین بابائی
@moeinbabaei

تخصص: Web developer

خب تو میتونی از این کد رو در قسمت import در phpmyadmin قرار بده

CREATE TABLE `likes`. ( `id` INT NOT NULL AUTO_INCREMENT , `like` INT NOT NULL DEFAULT '0' , `ip` INT NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;

و در فیلد اول به صورت اتوماتیک اضافه میشه که بعدا می تونی تعداد رو از روی این محاسبه کنی
در فیلد دوم می تونی عددی بزاری مثلا اگر لایک شد 1 و دیس لایک شد عدد -1 یا 2 رو اینسرت کنی
و در فیلد اخر هم ای پی رو ریموت می کنی که در اخر فقط هر کاربر بتواند یکبار رای بدهد

و بقیه کد ها php هستش

منبع برای یادگیری دیتابیس و ..

محمد امیری
محمد امیری
@mohammadeng3731

تخصص: backend coder

سلام.
میتونید برای لایک جدا و برای dislike جدا جدول ایجاد کنید و با ایجاد رابطه یک به چند با جدول پست مثلا و با استفاده از withCount بیای تعداد لایک هارو بشماری

post::withCount(['likes','dislikes'])->get()

شاید پاسخ شما همین‌جا باشد

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

پاسخ سوالتون خیلی بستگی داره به نیازتون. یک وقت هست صرفا به تعداد سرجمع شده لایک و دیس لایک احتیاج دارید. یعنی یک عدد که حاصل جمع لایک ها به شکل مثبت و دیس لایک ها به شکل منفی هست. اینجوری فقط کافیه یک فیلد از نوع integer به جدول پست هاتون بعنوان مثال اضافه کنید و با هر بار لایک یک عدد بهش اضافه بشه (increment) و با هر بار دیس‌لایک یک واحد ازش کم بشه. (decrement)

یک وقت هست براتون مهمه که بدونید چه کاربری کدوم پست رو لایک یا دیس‌لایک کرده. اون وقت طبیعتا یک رابطه One-To-Many بینشون برقراره. و میشه بعنوان مثال یک جدول داشت با نام votes با فیلدهای زیر:

- post_id
- user_id
- type

که برای فیلد تایپ میشه 1 بمعنای لایک و -1 بمعنای دیس لایک داشت.

اگر هم نظرسنجیتون جنبه عمومی تر داره و نمی‌خواید محدود به کاربرهای از پیش ثبت نام کرده باشه، احتمالا بایستی از روش هایی مثل استفاده از IP یا Session استفاده کنید تا جلوی ثبت رای‌های تکراری گرفته بشه. ولی منطقش به همین شکل باقی می‌مونه تقریبا.

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

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