Автор Тема: Помощ за класация!!!  (Прочетена 1469 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

afreto

  • Newbie
  • *
  • Благодарности
  • -Казани: 1
  • -Получени: 0
  • Публикации: 5
Помощ за класация!!!
« -: 19 Април 2012, 23:35:43 »
Здравейте. Имам един проблем който не мога да разареша. Гледах из други сайтове навръзвах кодове но все не ми се получава. Та проблема е следния. имам онлайн игра.искам да направя класация на потребителите според нивото (с това се справям , както и с страницирането на резултатите) но искам отпред да ми показва на кое място е.
Пример:
№  | име | ниво
--------------------
1 | пешо    | 20
2 | иван     | 15
3 | драган | 8
__
пред. {1},2,3 следв.

Също така да има една от опциите или в края на таблицата преди номерата на страниците да показва на кое място съм АЗ, като това да го показва на всяка страница
Пример:
№  | име | ниво                     |       №  | име | ниво
--------------------                     |        --------------------
1   | пешо    | 20                    |       10   | пешо    | 7
2   | иван     | 15                    |       11   | иван     | 5
3   | драган | 8                      |       12   | драган | 4
         ...                                  |                  ...
28 | АЗ        | 2                       |       28 | АЗ        | 2
__                                          |        __
пред. {1},2,3 следв.   |       пред. 1,{2},3 следв.

 или да има бутон "къде съм аз" и като се кликне на него да показва таблица например от 10 играча и аз да съм по средата
Пример:
№  | име | ниво
--------------------
26   | пешо    | 5
27   | иван     | 3
28   | АЗ         | 2
29   | пешо    | 1
30   | иван     | 1
__
пред. 1,{2},3 следв.


естествено трябва и да се помисли при еднакво ниво да подрежда по друг критерии но това в последствие.
Надявам се сте ме разбрали и да можете да ми помогнете




howto

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 44
  • -Получени: 4
  • Публикации: 341
Re: Помощ за класация!!!
« Отговор #1 -: 20 Април 2012, 00:20:38 »
Е ако ти си създал играта това което искаш да направиш ще ти бъде много ясно ! Sql и php ще ти свършат чудесна работа ! Хм аз неможах да схвана точно какво искаш да направиш но трябва да имаш променлива например maxskill = 10000. и ако играча има 200 gold да е равен на 10 rating , ако е 400 да е на 20 и т.н. Трябва да определиш критерии и да се влиаеш от него. Не се очайвай има даста добри players тук ще ти helpnat ;) Но по въпроса ти съдя,че ти не си писал играта !!!
Погледни как се прави странициране !
« Последна редакция: 20 Април 2012, 00:26:43 от howto »

afreto

  • Newbie
  • *
  • Благодарности
  • -Казани: 1
  • -Получени: 0
  • Публикации: 5
Re: Помощ за класация!!!
« Отговор #2 -: 20 Април 2012, 01:00:54 »
Е ако ти си създал играта това което искаш да направиш ще ти бъде много ясно ! Sql и php ще ти свършат чудесна работа ! Хм аз неможах да схвана точно какво искаш да направиш но трябва да имаш променлива например maxskill = 10000. и ако играча има 200 gold да е равен на 10 rating , ако е 400 да е на 20 и т.н. Трябва да определиш критерии и да се влиаеш от него. Не се очайвай има даста добри players тук ще ти helpnat ;) Но по въпроса ти съдя,че ти не си писал играта !!!
Погледни как се прави странициране !
Аз си я пиша играта но  естествено че си помагам с готови кодове :) Идеята е следната имаш автобус->превозваш пътници. в зависимост от прев. пътници и изминатото разстояние печелиш опит. при опит >=100 -->+1 ниво.

Stan

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 27
  • -Получени: 135
  • Публикации: 641
Re: Помощ за класация!!!
« Отговор #3 -: 20 Април 2012, 14:05:13 »
Ако искаш някой да ти помогне добре ще е да дадеш структурата на таблицата в бази данни с която се прави класацията както и php кода със заявките.

howto

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 44
  • -Получени: 4
  • Публикации: 341
Re: Помощ за класация!!!
« Отговор #4 -: 20 Април 2012, 15:55:51 »
Азбучен ти май и гадател ставаш вече :D Как пък разбра,че е на php sql ? Щот и този въпрос си зададох аз ма още го мисля :D

HD

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 208
  • -Получени: 165
  • Публикации: 3077
Re: Помощ за класация!!!
« Отговор #5 -: 20 Април 2012, 17:42:11 »
Ами гадател. Не вярвам да е нещо различно от php/mysql. Пича да даде инфо малко повече.

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 269
  • Публикации: 2595
  • meow
Re: Помощ за класация!!!
« Отговор #6 -: 20 Април 2012, 19:14:27 »
Здравей и добре дошъл,
явно не съм само аз неразбралия точно същността на проблема.

Цитат
но искам отпред да ми показва на кое място е.
Това трябва да е първия въпрос? Искаш да визуализираш число от 1 до лимита на страницирането, пред името на играча, така ли?


Цитат
Също така да има една от опциите или в края на таблицата преди номерата на страниците да показва на кое място съм АЗ, като това да го показва на всяка страница
Това изглежда по-лесно, просто пусни една заявка преди да покажеш страниците, в която селектираш лицето "аз".

Структурирай си въпросите и ние ще намерим отговорите.



п. с. Райо, ми то в php раздела, какво трябва да бъде  ::)
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

afreto

  • Newbie
  • *
  • Благодарности
  • -Казани: 1
  • -Получени: 0
  • Публикации: 5
Re: Помощ за класация!!!
« Отговор #7 -: 20 Април 2012, 19:52:08 »
Така. Да започвам с обясненията. Използвам php и mysql.
Структурата на базата е в прикачения файл.
Кода на класацията е следния:
<?
ob_start();
session_start();
// set timeout period in seconds
$inactive = 1800;
// check to see if $_SESSION['timeout'] is set
if (isset($_SESSION['timeout'])) {
    $session_life = time() - $_SESSION['timeout'];
    if ($session_life > $inactive) {
        session_destroy();
        header("Location: index.php");
    }
}
$_SESSION['timeout'] = time();
$title = "НАЧАЛО";
include 'head.php';
include 'config.php';
?><div id="container"><? include 'header_content.php'; ?>
<? include 'menu.php'; ?>
    <div id="content">
        <?
        if ($_SESSION['is_logged'] === TRUE) {
            include 'user_panel.php';
            $broinastranica = 10;
            $pageNum = 1;
            if (isset($_GET['page'])) {
                $pageNum = $_GET['page'];
            }
            $redove = ($pageNum - 1) * $broinastranica;
            $query = "SELECT * FROM `users`";
            $result = mysql_query($query) or die(mysql(mysql_error()));
            $red = mysql_num_rows($result);
            $query = "SELECT * FROM `users`  ORDER BY `nivo` DESC  LIMIT " . $redove . "," . $broinastranica . "";
            $result = mysql_query($query) or die(mysql(mysql_error()));
            ?>
            <table id="mytable"  align="center" cellspacing="0">
                <tr >
                    <th id="th" scope="col">№</th>
                    <th id="th" scope="col">име</th>
                    <th id="th" scope="col">ниво</th>
                </tr><?
        while ($row = mysql_fetch_array($result)) {
                ?>
                    <tr id="tr">
                        <td ><?= $mqsto ?></td>
                        <td ><? echo $row['user_name']; ?></td>
                        <td ><? echo $row['nivo']; ?></td>
                    </tr>
                    <?
                }
                ?>
            </table>
            <?
            $query = "SELECT COUNT(user_id) AS numrows FROM users  ";
            $result = mysql_query($query) or die(mysql(mysql_error()));
            $row = mysql_fetch_array($result, MYSQL_ASSOC);
            $numrows = $row['numrows'];
            $maxPage = ceil($numrows / $broinastranica);
            $self = $_SERVER['PHP_SELF'];
            $nomeranastranici = '';
            for ($page = 1; $page <= $maxPage; $page++) {
                if ($page == $pageNum) {
                    $nomeranastranici .= "<span class='current'> " . $page . " </span>";
                } else {
                    $nomeranastranici .= "<a href=\"$self?page=$page\" > " . $page . " </a>";
                }
            }
            if ($pageNum > 1) {
                $page = $pageNum - 1;
                $predishna = "<a href=\"$self?page=$page\" title='Предишна'> Предишна </a>";
                $parva = "<a href=\"$self?page=1\" title='Първа'> Първа </a>";
            } else {
                $predishna = "";
                $parva = "";
            }
            if ($pageNum < $maxPage) {
                $page = $pageNum + 1;
                $sledvashta = "<a href=\"$self?page=$page\" title='Следваща'> Следваща </a>";
                $posledna = "<a href=\"$self?page=$maxPage\" title='Последна'> Последна </a>";
            } else {
                $sledvashta = "";
                $posledna = "";
            }
            ?>
            <div id="pg">
                <? echo "" . $parva . "" . $predishna . "" . $nomeranastranici . "" . $sledvashta . "" . $posledna . "" ?>
            </div>
            <?
        } else {
            echo '<div class="error" >Не сте логнат!</div>';
        }
        ?>
    </div><div id="right"><? include'right_content.php'; ?></div>
</div><div id="footer"><? include 'footer_content.php'; ?></div>
<?
include 'footer.php';
ob_flush();
?>


A по въпросите на @Avalanche
Здравей и добре дошъл,
явно не съм само аз неразбралия точно същността на проблема.

Цитат
но искам отпред да ми показва на кое място е.
Това трябва да е първия въпрос? Искаш да визуализираш число от 1 до лимита на страницирането, пред името на играча, така ли?
Да точно това искам но не мога да го направя защото като отида на втора страница таблицата пак ми започва от 1. В момента съм изтрил това за номерацията но в общи линии като го направя с $mqsto=1; и в while сложа $mqsto++; не става.
 
Цитат
Също така да има една от опциите или в края на таблицата преди номерата на страниците да показва на кое място съм АЗ, като това да го показва на всяка страница
Това изглежда по-лесно, просто пусни една заявка преди да покажеш страниците, в която селектираш лицето "аз".
 
Да това го правя но как пред името да изкара на кое място съм. Ето това не знам.

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 269
  • Публикации: 2595
  • meow
Re: Помощ за класация!!!
« Отговор #8 -: 20 Април 2012, 20:16:38 »
Всичко си сложил в една таблица, което не е никак хубаво и ще ти създава проблеми.

Преди while цикъла:
Код: PHP
  1. $mqsto = $redove;
В while, преди визуализация - $mqsto++ и тогава го показваш.
Провери го това, сега ми дойде просто като идея - не съм сигурен дали ще сработи.

За другото нещо се сещам удачен вариант, трябва да въртиш цялата таблица за да вземеш тоя резултат:
Код: PHP
  1. // while(...
  2. if($row['user_id'] == $_SESSION['user_id']) {
  3.      $my_position = $mqsto; // трябва да обърнеш цялата таблица, за да видиш след кой играч се падаш ти
  4. }
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

afreto

  • Newbie
  • *
  • Благодарности
  • -Казани: 1
  • -Получени: 0
  • Публикации: 5
Re: Помощ за класация!!!
« Отговор #9 -: 20 Април 2012, 21:01:44 »
Всичко си сложил в една таблица, което не е никак хубаво и ще ти създава проблеми.

Преди while цикъла:
Код: PHP
  1. $mqsto = $redove;
В while, преди визуализация - $mqsto++ и тогава го показваш.
Провери го това, сега ми дойде просто като идея - не съм сигурен дали ще сработи.

За другото нещо се сещам удачен вариант, трябва да въртиш цялата таблица за да вземеш тоя резултат:
Код: PHP
  1. // while(...
  2. if($row['user_id'] == $_SESSION['user_id']) {
  3.      $my_position = $mqsto; // трябва да обърнеш цялата таблица, за да видиш след кой играч се падаш ти
  4. }

Благодаря за първото получава се но с малка подробност: $mqsto = $redove+1;

За второто показва ми мястото само когато отида на страницата кадето съм аз, но аз искам на всяка страница да ми го показва.  . А  сега се замислих и друго резултатите да се записват в друга таблица и в последствие да се проверява с колко места се е качил в класацията..
« Последна редакция: 20 Април 2012, 21:42:00 от afreto »

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 269
  • Публикации: 2595
  • meow
Re: Помощ за класация!!!
« Отговор #10 -: 21 Април 2012, 00:24:24 »
Дам, идея е да се направи отделна таблица, в която примерно да има user_id и опит (точки) и да ъпдейтваш само нея. Но като гледам си още начинаещ, тепърва ще видиш колко по-добре е да си държиш всичко разделено и подредено, пък и заявките не са чак толкова сложни. Кодът ти също е като от книга, но това няма да го коментирам.

Сега, ако бях на твое място и трябваше да се придържам към вече изградената система, щях да направя така:
Вадя всички резултати, подредени по точки и намирам на кое място се намирам "аз":
Код: PHP
  1. $x = 0; //почваме от нулева позиция
  2. while ($row = mysql_fetch_array($result)) {
  3.     $x++;
  4.     if($row['user_id'] == $_SESSION['user_id'] {
  5.          $_SESSION['my_position'] = $x; //на което превъртане, моето ID съвпадне с това базата данни при такова подреждане - това е моят ранк
  6.          break; //вече може да спреш търсенето
  7.     }
  8. }
  9. echo 'Моята позиция е ' . $_SESSION['my_position'];
Но не забравяй! За да работи това правилно, ще трябва да обърнеш цялата база данни. Break-a ще спре изчисленията като намери позицията, ама какво става, ако човека е последен и имаш бая играчи?   ::)
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

howto

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 44
  • -Получени: 4
  • Публикации: 341
Re: Помощ за класация!!!
« Отговор #11 -: 21 Април 2012, 01:39:37 »
Браво Avalanche . А до въпроса с php/mysql информацията може да се съхранява и другаде освен в база данни нали :) Защото на скоро на мен ми бе по удобно   с папки и файлове  .
« Последна редакция: 21 Април 2012, 01:41:30 от howto »

afreto

  • Newbie
  • *
  • Благодарности
  • -Казани: 1
  • -Получени: 0
  • Публикации: 5
Re: Помощ за класация!!!
« Отговор #12 -: 21 Април 2012, 13:15:50 »
Сега, ако бях на твое място и трябваше да се придържам към вече изградената система, щях да направя така:
Вадя всички резултати, подредени по точки и намирам на кое място се намирам "аз":
Код: PHP
  1. $x = 0; //почваме от нулева позиция
  2. while ($row = mysql_fetch_array($result)) {
  3.     $x++;
  4.     if($row['user_id'] == $_SESSION['user_id'] {
  5.          $_SESSION['my_position'] = $x; //на което превъртане, моето ID съвпадне с това базата данни при такова подреждане - това е моят ранк
  6.          break; //вече може да спреш търсенето
  7.     }
  8. }
  9. echo 'Моята позиция е ' . $_SESSION['my_position'];
Но не забравяй! За да работи това правилно, ще трябва да обърнеш цялата база данни. Break-a ще спре изчисленията като намери позицията, ама какво става, ако човека е последен и имаш бая играчи?   ::)

Много ти благодаря. Така се получи. Само дето направих отделна заявка която избира цялата таблица без лимит, и ми показва мястото без да е нужно да отида на страницата където съм аз :) незнам до колко ще работи при много играчи и например ако съм първи или последен.
Колкото до подреждането по друг критерии мисля че ще стане така:
Код: PHP
  1. ORDER BY `nivo` DESC, `opit` DESC
« Последна редакция: 21 Април 2012, 13:50:31 от afreto »