• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مدیریت Playlist موسیقی User ها با PHP
#1
Tongue 
سلام خسته نباشید بچه هاHeart
میخوام ی پروژه طراحی کنم که هر کاربر ثبت نام میکنه و بعد میتونه موسیقی مورد علاقش رو انتخاب کنه ( موسیقی های از قبل آپلود شده در سرور ) حالا من چطور میتونم بین اون User و فایل های موسیقی ارتباطیش ارتباط برقرار کنم که وقتی طرف لوگین کرد اون Playlist موسیقی که انخاب کرده بهش نشون داده بشه ؟
پیشاپیش بابت پاسختون ممنومAngelHuhHeart
  پاسخ
تشکر شده توسط :
#2
خب سوالت چیه؟
نوشتی میخوای اینکارو بکنی! خب؟
همه جوره اش رو داریم ظاهرن
  پاسخ
تشکر شده توسط : ayoubsys
#3
(۱۳۹۷ اردیبهشت ۳۱, ۰۳:۰۱ ب.ظ)molana نوشته: خب سوالت چیه؟
نوشتی میخوای اینکارو بکنی! خب؟

من چطور میتونم بین اون User و فایل های موسیقی ارتباطیش ارتباط برقرار کنم که وقتی طرف لوگین کرد اون Playlist موسیقی که انخاب کرده بهش نشون داده بشه ؟
  پاسخ
تشکر شده توسط :
#4
(۱۳۹۷ خرداد ۰۱, ۱۲:۴۳ ب.ظ)Sat0ri نوشته:
(۱۳۹۷ اردیبهشت ۳۱, ۰۳:۰۱ ب.ظ)molana نوشته: خب سوالت چیه؟
نوشتی میخوای اینکارو بکنی! خب؟

من چطور میتونم بین اون User و فایل های موسیقی ارتباطیش ارتباط برقرار کنم که وقتی طرف لوگین کرد اون Playlist موسیقی که انخاب کرده بهش نشون داده بشه ؟

مشکل در طراحی دیتابیس دارین یا در برنامه نویسی پروژه؟

توضیح کوتاه زیر رو بخونین، اگه نیاز بود بگین مشکلتون با کدوم قسمته تا بیشتر توضیح بدم
در طراحی دیتابیس:
شما تعدادی فایل موسیقی دارین، پس بهتره یه تیبل برای نگهداری اسم و مشخصات فایل‌های موسیقی داشته باشین. (فایل‌های اگه داخل چند دایرکتوری باشن، اینم میشه داخل همین تیبل)
کاربراتون نیاز به یک تیبل جدا دارن که قطعا انجامش دادین.
حالا هر پلی‌لیست شامل تعدادی آهنگه، پس باید یه ظرف یعنی تیبل برای نگهداری اسم و مشخصات پلی‌لیست و یک تیبل برای نگهداری رابطه بین تیبل پلی‌لیست و موسیقی‌های مورد نیاز و یک تیبل برای تخصیص هر پلی لیست به کاربر مورد نظر داشته باشین.
ساختار زیر یه ساختار ساده برای درک بهتر این موضوع است:
کد:
musics
    id
    music_name
    singer
users
    id
    email
    username
playlists
    id
    playlist_name
    created_at
music_playlist
    playlist_id
    music_id
playlist_user
    playlist_id
    user_id
در مورد کد بالا،
هر جا که از آندرسکور و بعدش id استفاده کردم، باید primary key باشن.
و Foreign key بشه به ستون id از تیبل مورد نظر.
و البته همینو در صورت نیاز می‌تونین واسه خواننده‌ها هم بسط بدین.
اگه پلی‌لیست‌ها خصوصی هستن و قابل اشتراک‌گذاری نیستن، نیازی به تیبل نگهدارنده رابطه‌ها نیست و کافیه داخل تیبل پلی‌لیست یه ستون برای user_id بزارین.

در قسمت برنامه نویسی هم ارتباط یک به چند (یک یوزر به چند پلی‌لیست و ...) و با join کردن مشکلی باقی نمی‌مونه.

توضیح بالا خیلی ساده بود، فقط جهت اینکه بفهمیم مشکلتون کدوم قسمته. و بعد همون قسمت رو بیشتر توضیح بدم. طراحی دیتابیس مشکل دارین یا برنامه نویسی؟
لطفا پست چگونه پاسخ مشکل خود را سریع بیابیم رو مطالعه کنین، اینجوری سریعتر پاسخ سوالاتتون رو می‌گیرین.

موفق باشید.
  پاسخ
تشکر شده توسط : Sat0ri
#5
(۱۳۹۷ خرداد ۰۲, ۰۵:۱۵ ق.ظ)Version نوشته: مشکل در طراحی دیتابیس دارین یا در برنامه نویسی پروژه؟

توضیح کوتاه زیر رو بخونین، اگه نیاز بود بگین مشکلتون با کدوم قسمته تا بیشتر توضیح بدم
در طراحی دیتابیس:
شما تعدادی فایل موسیقی دارین، پس بهتره یه تیبل برای نگهداری اسم و مشخصات فایل‌های موسیقی داشته باشین. (فایل‌های اگه داخل چند دایرکتوری باشن، اینم میشه داخل همین تیبل)
کاربراتون نیاز به یک تیبل جدا دارن که قطعا انجامش دادین.
حالا هر پلی‌لیست شامل تعدادی آهنگه، پس باید یه ظرف یعنی تیبل برای نگهداری اسم و مشخصات پلی‌لیست و یک تیبل برای نگهداری رابطه بین تیبل پلی‌لیست و موسیقی‌های مورد نیاز و یک تیبل برای تخصیص هر پلی لیست به کاربر مورد نظر داشته باشین.
ساختار زیر یه ساختار ساده برای درک بهتر این موضوع است:
کد:
musics
    id
    music_name
    singer
users
    id
    email
    username
playlists
    id
    playlist_name
    created_at
music_playlist
    playlist_id
    music_id
playlist_user
    playlist_id
    user_id
در مورد کد بالا،
هر جا که از آندرسکور و بعدش id استفاده کردم، باید primary key باشن.
و Foreign key بشه به ستون id از تیبل مورد نظر.
و البته همینو در صورت نیاز می‌تونین واسه خواننده‌ها هم بسط بدین.
اگه پلی‌لیست‌ها خصوصی هستن و قابل اشتراک‌گذاری نیستن، نیازی به تیبل نگهدارنده رابطه‌ها نیست و کافیه داخل تیبل پلی‌لیست یه ستون برای user_id بزارین.

در قسمت برنامه نویسی هم ارتباط یک به چند (یک یوزر به چند پلی‌لیست و ...) و با join کردن مشکلی باقی نمی‌مونه.

توضیح بالا خیلی ساده بود، فقط جهت اینکه بفهمیم مشکلتون کدوم قسمته. و بعد همون قسمت رو بیشتر توضیح بدم. طراحی دیتابیس مشکل دارین یا برنامه نویسی؟
لطفا پست چگونه پاسخ مشکل خود را سریع بیابیم رو مطالعه کنین، اینجوری سریعتر پاسخ سوالاتتون رو می‌گیرین.

موفق باشید.

بابت لحن و توضیحات عالیتون خیلی خیلی ممنونم من هرجا سوالم رو پرسیدم با ی لحن خیلی بد برخورد کردن واقعا شما فرد لایق و با شخصیتی هستینHeartHeart
من قسمت اول مشکلم که اینکه ساختاری که قراره توی DB ایجاد بشه چجوری باید باشه حل شد فقط اگر کاربر بخواد انتخاب کته که این Playlist خصوصی باشه یا عمومی چجوری باید چنین کاری انجام بشه ؟ (اگر اشکالی نداشته باشه ی مثال خیلی ساده با کد PHP روی این موضوع و نحوه ارسال اطلاعات در دو صورت Private و Public به دیتابیس چگونه باشه )
و اینکه این موسیقی مثلا در سرور در این آدرس قرار داره :
کد:
http://site.com/stream/music1.mp3
این فایل رو چطور باید اطلاعاتش رو در دیتابیس وارد کنم ؟

الان به درک اینکه تو ی سرویس استریم موزیک مثل SoundCloud چطور دیتابیس ساختارش تعیین میشه فقط این سوال بالا ی درک خوب بهم از کد زدنش میدهHeart
کد:
در قسمت برنامه نویسی هم ارتباط یک به چند (یک یوزر به چند پلی‌لیست و ...) و با join کردن مشکلی باقی نمی‌مونه.
اگر ی مثال ساده PHP بزنید عالی میشه واقعا
پیشاپیش بابت وقتی که برای سوالم میذارید ممنونم
  پاسخ
تشکر شده توسط :
#6
(۱۳۹۷ خرداد ۰۲, ۰۸:۲۲ ق.ظ)Sat0ri نوشته:
(۱۳۹۷ خرداد ۰۲, ۰۵:۱۵ ق.ظ)Version نوشته: مشکل در طراحی دیتابیس دارین یا در برنامه نویسی پروژه؟

توضیح کوتاه زیر رو بخونین، اگه نیاز بود بگین مشکلتون با کدوم قسمته تا بیشتر توضیح بدم
در طراحی دیتابیس:
شما تعدادی فایل موسیقی دارین، پس بهتره یه تیبل برای نگهداری اسم و مشخصات فایل‌های موسیقی داشته باشین. (فایل‌های اگه داخل چند دایرکتوری باشن، اینم میشه داخل همین تیبل)
کاربراتون نیاز به یک تیبل جدا دارن که قطعا انجامش دادین.
حالا هر پلی‌لیست شامل تعدادی آهنگه، پس باید یه ظرف یعنی تیبل برای نگهداری اسم و مشخصات پلی‌لیست و یک تیبل برای نگهداری رابطه بین تیبل پلی‌لیست و موسیقی‌های مورد نیاز و یک تیبل برای تخصیص هر پلی لیست به کاربر مورد نظر داشته باشین.
ساختار زیر یه ساختار ساده برای درک بهتر این موضوع است:
کد:
musics
    id
    music_name
    singer
users
    id
    email
    username
playlists
    id
    playlist_name
    created_at
music_playlist
    playlist_id
    music_id
playlist_user
    playlist_id
    user_id
در مورد کد بالا،
هر جا که از آندرسکور و بعدش id استفاده کردم، باید primary key باشن.
و Foreign key بشه به ستون id از تیبل مورد نظر.
و البته همینو در صورت نیاز می‌تونین واسه خواننده‌ها هم بسط بدین.
اگه پلی‌لیست‌ها خصوصی هستن و قابل اشتراک‌گذاری نیستن، نیازی به تیبل نگهدارنده رابطه‌ها نیست و کافیه داخل تیبل پلی‌لیست یه ستون برای user_id بزارین.

در قسمت برنامه نویسی هم ارتباط یک به چند (یک یوزر به چند پلی‌لیست و ...) و با join کردن مشکلی باقی نمی‌مونه.

توضیح بالا خیلی ساده بود، فقط جهت اینکه بفهمیم مشکلتون کدوم قسمته. و بعد همون قسمت رو بیشتر توضیح بدم. طراحی دیتابیس مشکل دارین یا برنامه نویسی؟
لطفا پست چگونه پاسخ مشکل خود را سریع بیابیم رو مطالعه کنین، اینجوری سریعتر پاسخ سوالاتتون رو می‌گیرین.

موفق باشید.

بابت لحن و توضیحات عالیتون خیلی خیلی ممنونم من هرجا سوالم رو پرسیدم با ی لحن خیلی بد برخورد کردن واقعا شما فرد لایق و با شخصیتی هستینHeartHeart
من قسمت اول مشکلم که اینکه ساختاری که قراره توی DB ایجاد بشه چجوری باید باشه حل شد فقط اگر کاربر بخواد انتخاب کته که این Playlist خصوصی باشه یا عمومی چجوری باید چنین کاری انجام بشه ؟ (اگر اشکالی نداشته باشه ی مثال خیلی ساده با کد PHP روی این موضوع و نحوه ارسال اطلاعات در دو صورت Private و Public به دیتابیس چگونه باشه )
و اینکه این موسیقی مثلا در سرور در این آدرس قرار داره :
کد:
http://site.com/stream/music1.mp3
این فایل رو چطور باید اطلاعاتش رو در دیتابیس وارد کنم؟

الان به درک اینکه تو ی سرویس استریم موزیک مثل SoundCloud چطور دیتابیس ساختارش تعیین میشه فقط این سوال بالا ی درک خوب بهم از کد زدنش میدهHeart
کد:
در قسمت برنامه نویسی هم ارتباط یک به چند (یک یوزر به چند پلی‌لیست و ...) و با join کردن مشکلی باقی نمی‌مونه.
اگر ی مثال ساده PHP بزنید عالی میشه واقعا
پیشاپیش بابت وقتی که برای سوالم میذارید ممنونم

خواهش‌کنم، خیلی ممنون از لطفتون، بزرگوارید.

داخل تیبل playlist یک ستون دیگه بزارید و اسمشو مثلا بزارید is_private و چون یا عمومی هست یا خصوصی، بهتره نوعش بولین باشه. مقدار دیفالت رو بزارین 0 یعنی به طور پیش‌فرض همه پلی‌لیست‌ها عمومی باشن مگه کاربر بخواد خصوصی باشه. وقتی از دیتابیس پلی‌لیست بگیرین، 0 رو برای عمومی و 1 رو برای خصوصی در نظر بگیرین.

اگه بخوایم ذخیره کنیم داده رو با چک لیست از کاربر می‌پرسیم که اگه می‌خوای خصوصی باشن، تیک چک لیست رو بزن اگه نه عمومی در نظر می‌گیریم.

خب، بهترین راه اینه که یه فرم داشته باشین، داخلش فیلدهای مورد نیازتون رو تعریف کنین. حالا برای آپلود هم یه input جداگانه دارین، البته اگه فایل‌ها قبلا یا به روش دیگه‌ای روی سرور آپلود میشن، input می‌تونه URL نسبی یا مطلق بگیره و نیازی به آپلود نیست. یا ترکیبی از هر دو سولوشن رو استفاده کنین.

یه مشکلی که شاید اذیت کنه تعداد فایل‌ها است که احتمالا زیاد باشه حوصله نداشته باشین، راه‌حل اونم استفاده از فیلدهای داینامیکه که میشه فیلدهای غیر مشترک مثل نام موسیقی رو به انتهای فرم اضافه کرد و بعد یکجا گرفت فقط فراموش نکنین که name رو حتما به صورت آرایه نام‌گذاری کنین، مثلا فیلد نام موسیقی:
کد پی‌اچ‌پی:
<input type="name" name="musicName[]"

وارد کردن اطلاعات در دیتابیس
اول این مورد، وارد کردن اطلاعات کار سختی نیست. فرض کنیم کاربر یک پلی‌لیست بخواد بسازه. خب پلی‌لیست رو با نام و مشخصات مورد نظر در تیبل مورد نظرتون وارد کنین و بعد یه رکورد هم وارد تیبل playlist_user کنین که یوزر رو از id کاربر لاگین جاری و playlist_id رو هم از result کوئری قبلی بگیرین و تموم! فقط فراموش نکنین که با یه شرط چک کنین که کوئری اول موفق ذخیره شده باشه.
ولی یه مشکلی وجود داره، اگه وسط ذخیره سازی رکورد دوم مشکلی پیش اومد، خب تکلیف چیه؟ ما یه پلی لیست داریم که صاحب نداره و یا باید دوباره ساخته بشه یا owner برای تغییر در آینده نداره. راه‌حل موضوعی به نام ترنزکشن هستش، قبلا داخل سکان آکادمی نوشتم دربارش که گرچه توضیحاتش کامله، اگه نیاز بود بیشتر توضیح میدم. (مثال هم داره - متاسفانه دیگه با اون سایت همکاری ندارم ولی بزودی بخش مشابهی در سایت خودم ایجاد می‌کنم و حتما خیلی کاملتر توضیح میدم.)
البته ترنزکشن پرفورمنس رو هم تا حد قابل توجهی بهتر می‌کنه.

یه موردی که بهتره رعایت کنین داشتن ستونی برای Owner است چون بعدا فهمیدن اینکه کدوم پلی‌لیست رو کی می‌تونه تغییر بده سخت میشه.

خواندن اطلاعات از دیتابیس
حالا خواندن اطلاعات، خب فرض کنیم پلی‌لیست کاربر جاری رو نیاز دارین، حالا از طریق سشن یا دیتابیس id کاربر رو دارین، خب باید یه کوئری بزنین به شکل زیر:
البته همین کوئری هم سختگیر باشین یا تعداد ریکوئست‌ها زیاد باشن، میشه بهینه کرد تا پرفرمنس بهتری داشته باشه.
کد پی‌اچ‌پی:
SELECT *
FROM `playlist_user`
LEFT JOIN `playlists`
ON `playlist_user`.`playlist_id` = `playlists`.`id`;
WHERE (`user_id` = '{$id}'
چیز خاصی نیست، مثل result کوئری معمولی است.

دو تا نکته:
1. در تقابل استفاده از php و mysql بهتره از mysql استفاده کنین چون به مراتب پرفرمنس بهتری داره.
2. فیلدهای از نوع عدد صحیح که مقدار منفی ندارن، مثل timestamp و id رو unsigned بزارین و حتما باید اون فیلدهایی که بهشون foreign key میشن هم unsigned باشن.

خوشحالم که بدردتون خورد.
موفق باشین.
  پاسخ
تشکر شده توسط : Sat0ri Y.P.Y ayoubsys


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان