PDA

View Full Version : سوال: نمایش 10 کاربر برتر از دیتابیس



generalhak
یک شنبه 10 شهریور 1392, 12:37 عصر
سلام
من میخوام برای یک سیستم 10 کاربر برتر رو نشون بدم و داخل دیتابیس هم ایمیل و امتیاز رو دارم
حالا باید هر روز ببینه کدوما بیشترین امتیاز رو دارن
و همچنین ببینه کدوما بیشترین امتیاز رو در 30 روز گذشته دارن
چه راهی پیشنهاد میدید که بهینه باشه ؟!

engmmrj
یک شنبه 10 شهریور 1392, 12:42 عصر
باید Sort babel کنید رکورد ها :
http://www.w3schools.com/sql/sql_orderby.asp

generalhak
یک شنبه 10 شهریور 1392, 12:47 عصر
باید Sort babel کنید رکورد ها :
http://www.w3schools.com/sql/sql_orderby.asp

نه اونو میدونم منظور اینه که خوب وقتی Sort کنم اون کل رو میاره و روزانه رو نمیاره یعنی در کل هرکی امتیازش بیشتر بود رو میاره
حالا واسه این که هرکی امتیازش در هر روز و یا در هر ماه بیشتر بود چیکار کنم ؟!
یعنی مثلا باید بیام یک رکورد دیگه به جدول اضافه کنم که داخل اون هر روز امتیاز هر کار بر رو بریزم و هر روز پاک کنم امتیاز رو ؟ اینطوری خیلی غیر بهینه هست احساس میکنم !

engmmrj
یک شنبه 10 شهریور 1392, 12:50 عصر
شما تاریخ آپدیت هر امتیاز رو داری دیگه ؟ ، خوب تاریخ هر روز رو با تاریخ امتیاز ها چک کن.

generalhak
یک شنبه 10 شهریور 1392, 13:41 عصر
شما تاریخ آپدیت هر امتیاز رو داری دیگه ؟ ، خوب تاریخ هر روز رو با تاریخ امتیاز ها چک کن.
اینطوری هم نمیشه ! چون وقتی یک امتیاز آپدیت میشه مثلا اگر 11 باشه میشه 12 و تاریخ اگر بخوام ثبت کنم انگار امروز 12 تا امتیاز داره ولی در صورتی که 1 امتیاز داره واسه امروز !!

Unique
یک شنبه 10 شهریور 1392, 14:23 عصر
میشه ساختار جدول را بگی ! تاریخ را با چه فرمتی داری date یا unix یا شمسی یا عددی ؟
اگه کلی میخوای باید group by بگیری و با having مقادیر مورد نظر را جدا کنی ! اما اگه با مثال ساختار جدول را بگی من یا دوستان راهنمایی میکنیم !

generalhak
یک شنبه 10 شهریور 1392, 14:38 عصر
میشه ساختار جدول را بگی ! تاریخ را با چه فرمتی داری date یا unix یا شمسی یا عددی ؟
اگه کلی میخوای باید group by بگیری و با having مقادیر مورد نظر را جدا کنی ! اما اگه با مثال ساختار جدول را بگی من یا دوستان راهنمایی میکنیم !
جولی که دارم ایناست :
id - email - site - emtiyaz
حالا بازم میشه اضافه کنم ... یعنی پروژه در حال ساخت هست
تاریخ رو که میگید دقیق منظورتون رو نفهمیدم ! یعنی میگید باید یک رکورد هم واسه تاریخ اضافه کنم ؟
ببینید هروقت مثلا یوزر یک کاری انجام بده امتیازش یکی اضافه میشه یعنی امتیاز قبلی رو میگرم + 1 میکنم با دستور آپدیت
حالا روش رو بگید ؟ بهترین روش چیه ؟

افشین66
یک شنبه 10 شهریور 1392, 15:59 عصر
ای نظر منه یک جدول دیگه داشته باش هر امتیاز با تاریخش و آی پی امتیاز دهنده (برای اینکه نتونه 2 بار رای بده) تو یک جدول دیگه ذخیره کن و این دوتا رو هم بهم مرتبط کن .اون موقع هر کاری دلت خواست میتونی انجام بدی :)

ابوذر محمودی
یک شنبه 10 شهریور 1392, 16:00 عصر
شما باید یه فیلد دیگه به جدول اضافه کنین واسه تاریخ بدون فیلد تاریخ نمیشه.
حالا مثلا امروز اولین امتیازو گرفت میان یه رکورد ایجاد میکنین و تو تاریخش تاریخ همون روز و امتیاز یک رو درج میکنین.
اگه امتیاز بعدی رو گرفت بیان ببینین اگه تو اون روز امتیاز گرفته بود عدد مربوط به امتیازو یکی بهش اضافه کنه.
یعنی واسه هر روز یک رکورد تو دیتابیس واسش ثبت میشه
واسه بدست آوردن امتیاز روزانه هم کافیه اول بیان رکوردایی که تاریخ امروزن رو استخراج کنین بعد بر اساس امتیاز مرتب کنین و در انتها هم لیمیت 10 بذارید تا بیشتر انتخاب نکنه.
واسه ماهانه هم بهش رنج تاریخ بدین و الی آخر...
-میشه هم دو جدول روزانه و ماهانه داشته باشی .

Unique
یک شنبه 10 شهریور 1392, 17:15 عصر
برای اینکه در هر لحظه بیای ۱۰ تا کاربری که بیشترین امتیاز را دارند نشون بازدید کننده بدی نیاز به تاریخ نیست و کافیه با order by emtiyaz desc و limit 0,10 نشون بدی !\
اما برای ۳۰ روز گذشته قضیه فرق میکنه ! ببین شما برای این کار نباید update کنی ! باید هر زمانی امتیاز گرفته میشه امتیاز را با تاریخ توی یک جدول رابط ذخیره کنی و با count روی بازه تاریخی مورد نظر و group by روی مشخصه کاربری (حالا id یا email) و sort و limit مثل حالت قبل اطلاعات را بدست بیاری. یعنی مجبوری الگورتیمت را تغییر بدی !

ابوذر محمودی
یک شنبه 10 شهریور 1392, 18:01 عصر
برای اینکه در هر لحظه بیای ۱۰ تا کاربری که بیشترین امتیاز را دارند نشون بازدید کننده بدی نیاز به تاریخ نیست و کافیه با order by emtiyaz desc و limit 0,10 نشون بدی !\
اونطور که من برداشت کردم از این :

چون وقتی یک امتیاز آپدیت میشه مثلا اگر 11 باشه میشه 12 و تاریخ اگر بخوام ثبت کنم انگار امروز 12 تا امتیاز داره ولی در صورتی که 1 امتیاز داره واسه امروز !!
و این :

حالا باید هر روز ببینه کدوما بیشترین امتیاز رو دارن
ایشون میخوان کسانی که در هر روز امتیاز بیشتری کسب کردن رو نمایش بدن ، که واسه اینکار به تاریخ نیازه .
حالا شایدم من برداشت صحیحی نداشتم :)