رفتن به مطلب

مقدار دهی به یک فیلد براساس فیلد دیگر


edris1380

ارسال‌های توصیه شده

با سلام خدمت کاربران خوب این انجمن. ببخشید یه سوال داشتم که ذهنمو خیلی مشغول کرده و تا الان نتونستم براش راهی پیدا کنم . گفتم اینجا بپرسم شاید به یه جوابی رسیدم. :cheshmak:

 خب برای مثال من در دیتا بیسم برای هر کاربر 2 تا فیلد دارم 1 فیلد امتیاز و یک فیلد رتبه . حالا من تو بازیم سه تا کاربر دارم که دارن بازی میکنن مثالا کاربر 3 امتیازش 100 کار بر 2 امتیازش 10 و کاربر 1 امتیازش 50 حالا من میخوام که بیاد بر اساس اتیاز بیشتر به فیلد رتبم شماره بده . یعنی فیلد رتبه کاربر 3 که بالا ترین امتیاز رو داره بشه 1 کاربر 2 بشه 3 و کاربر 1 بشه رتبش 2 .  و این روند متغیره یعنی همیشه رتبه تغییر میکنه . نمیدونم تونستم منظورم رو برسونم یا نه اگر جواب بدید ممنون میشم :sorry:

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام 

خب چون دیتابیستون ظاهرا آنلاینه ، توی php مثل این بازی من اینکار رو کرده ام :

 

$sql = "SELECT * FROM tbl_member ORDER BY emtiaz_user DESC, online ASC  ";

ORDER BY emtiaz_user DESC   این قسمت امتیازو از بیشتربه کمتر مرتب میکنه،اینم بگم شاید به دردتان بخوره!   online هم کاربران آنلاین رو بالاتر از کاربران آفلاین نشون میده ،یعنی دوترتیب روباهم لحاظ میکنه!

ASC ترتیب صحیح هست و DESC ترتیب معکوس .

 

بعداز این ترتیب دهی اگه بخواین فیلدی رو هم تغییرش بدین یه متغییر عددی بذارید که همیشه از یک شروع بشه و یکی یکی همراه خوندن سطرهای دیتابیس در php یا قسمت جیسون زیاد بشه ،بعدش بجای دستور Select ، با دستور Update در php اون فیلد رو بروزرسانی کنید.(به نظرم توی بازی آنلاین که هرلحظه جای بازیکنان عوض میشه این قسمت دوم نیاز نیست ! همون بالایی کفایت میکنه . مگراینکه واسه ی کاربرد خاصی غیرازنمایش رتبه بخواین ازش استفاده کنید!)

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام دوست عزیز

 

نمیدونم سوالتون رو درست متوجه شدم یا نه اگر درست متوجه شده باشم شما می خواین به کاربراتون به ترتیب امتیاز بالا به پایین رتبه بدین که بالاترین امتیاز رتبه اول و کمترین امتیاز رتبه آخر رو داشته باشه

 

شما ابتدا یک متغیر از نوع آرایه تعریف می کنید که بعنوان کلید امتیاز کاربرها رو میگره و به عنوان مقدار یک آرایه می گیره که آرایه دوم به عنوان کلید یوزرنیم کاربرها و به عنوان مقدار رتبه کاربرها رو می گیره .

 

شما ابتدا باید اطلاعات کاربرها یعنی امتیاز هر کاربر و یوزرنیم هر کاربر را توی آرایه ذکر شده بریزید و سپس با استفاده از از تابع ()krsort آرایه رو برحسب کلید اون یعنی امتیاز های کاربرها از بیشترین به کمترین مرتب کنید بعد از مرتب کردن هم که به راحتی در یک حلقه foreach رتبه هر کاربر را در آرایه دوم ذکر شده میریزید .

 

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

 

 

<?php

$user1Point = 50;
$user2Point = 10;
$user3Point = 100;

$user1Username = 'ali';
$user2Username = 'mohammad';
$user3Username = 'hossein';

$usersInfo = array();/* $usersInfo[UserPoint] = array(UserUsername,UserRating) */

$usersInfo[$user1Point] = array($user1Username => '');
$usersInfo[$user2Point] = array($user2Username => '');
$usersInfo[$user3Point] = array($user3Username => '');

krsort($usersInfo,SORT_NUMERIC);

$numberOfUsers = count($usersInfo);

$UserRating = 1;

foreach ($usersInfo As $key => $value) {
    $usernameRatingArray = $usersInfo[$key];
    reset($usernameRatingArray);
    $uUserName = key($usernameRatingArray);
    $usernameRatingArray[$uUserName] = $UserRating++;
    $usersInfo[$key] = $usernameRatingArray;
}
reset($usersInfo);

foreach ($usersInfo as $uPoint => $value) {
    $usernameRatingArray = $usersInfo[$uPoint];
    reset($usernameRatingArray);
    $uUserName = key($usernameRatingArray);
    $uRating = $usernameRatingArray[$uUserName];
    echo "$uUserName => Point : $uPoint , Rating : $uRating ;            \n";
}





?>

 

اگه نکته ای یا سوالی بود در خدمتم :53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

با سلام و ممنون از جوابتون . بله منظورم رو درست متوجه شدید فقط اینجا یه مشکلی هست که مقدار کاربر متغیره یعنی امکان داره 100 تا کاربر باشه بعد بشه 150 تا میشه راهنماییم کنید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 18 دقیقه قبل، edris1380 گفته است :

با سلام و ممنون از جوابتون . بله منظورم رو درست متوجه شدید فقط اینجا یه مشکلی هست که مقدار کاربر متغیره یعنی امکان داره 100 تا کاربر باشه بعد بشه 150 تا میشه راهنماییم کنید

 

فرقی نداره توی کد برای نمونه که خودتون فرمودید 3 کاربر ذکر شد شما می تونید کاربرها رو که تعدادشون متغیر هست را از دیتابیس بگیرید و با حلقه اون ها رو به آرایه اضافه کنید . برای نمونه :

 

<?php
require 'db.php';

$usersInfo = array();/* $usersInfo[UserPoint] = array(UserUsername,UserRating) */

$usersQuery = $connection->query("SELECT UserPoint,UserName From  TableUsers;");
while ($row = $usersQuery->fetch_assoc()) {
	$usersInfo[$row['UserPoint']] = array($row['UserName'] => '');
}
$usersQuery->close();

krsort($usersInfo,SORT_NUMERIC);

$numberOfUsers = count($usersInfo);

$UserRating = 1;

foreach ($usersInfo As $key => $value) {
    $usernameRatingArray = $usersInfo[$key];
    reset($usernameRatingArray);
    $uUserName = key($usernameRatingArray);
    $usernameRatingArray[$uUserName] = $UserRating++;
    $usersInfo[$key] = $usernameRatingArray;
}
reset($usersInfo);

foreach ($usersInfo as $uPoint => $value) {
    $usernameRatingArray = $usersInfo[$uPoint];
    reset($usernameRatingArray);
    $uUserName = key($usernameRatingArray);
    $uRating = $usernameRatingArray[$uUserName];
    echo "$uUserName => Point : $uPoint , Rating : $uRating ;            \n";
}





?>

 

بعد از به دست آوردن رتبه هر کاربر می تونید دوباره رتبه ها رو در دیتابیس به روز رسانی کنید . 

 

اگه نکته ای یا سوالی بود در خدمتم :53:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...