Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Zsumowanie 2 rekordów i wypisanie posortowanych wyników
grzegosh
post
Post #1





Grupa: Zarejestrowani
Postów: 51
Pomógł: 3
Dołączył: 26.06.2008

Ostrzeżenie: (0%)
-----


Witam.
Dla treningu piszę swoją prostą gierkę internetową.
Mam w bazie różne dane o postaci, tworze sortowanie wyświetlania wyników po róznych polach, np po nicku alfabetycznie, ilości wygranych walk itp.
Chciałbym też zrobic sortowanie po sumie walk, czyli po wszystkich stoczonych walkach.
Mam w bazie pola wins oraz loses. Sortowanie po największej licznie wygranych jest proste, ale jak zrobic sortowanie po ilosci walk (czyli sumie wygranych i przegranych)?

Drugie pytanie: jak zrobić najlepiej, że po kliknieciu na sortowanie wg np nicku, jak kliknę raz to sortuje ASC, jak drugi raz to DESC? Myślałem o przekazywaniu getem sposobu sortowania np:
sort=nick&sposob=asc
Czy to dobre rozwiązanie? Jest jakieś lepsze?
Dziękuję.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
grzegosh
post
Post #2





Grupa: Zarejestrowani
Postów: 51
Pomógł: 3
Dołączył: 26.06.2008

Ostrzeżenie: (0%)
-----


Dzięki, działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Nie byłem daleko jednak (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

A czy ten sposób sortowania jak sie kliknie 2 raz na dany link to sortuje DESC, jak sie kliknie znow to ASC? Mój działa, jest w porządku, prócz tego, że jak ktoś kliknie na jakieś sortownie, potem ustawi zmienną na sortowanie DESC i jak kliknę na inny link sortujący to on posortuje wg DESC bo pobierze z GET'a... Jest lepsza metoda?

Edit: a nie, przepraszam, jednak nie działa to poprawnie... Nie wyświetla mi w ogole sum tych walk... ;/ może dam cały kod, coś pomoże nie wiem. W dodatku wypisuje wiecej danych niż tylko te walki, wiec musze wybrać z bazy wiecej.

  1. <?php
  2. $by = '';
  3. switch($_GET['sort'])
  4. {
  5.    case 'lvl':
  6.        if($_GET['by']=='z')
  7.        {
  8.            $by = '&by=a';
  9.            $query = mysql_query("SELECT * FROM characters ORDER BY lvl ASC, login ASC");
  10.        }
  11.        else
  12.        {
  13.            $by = '&by=z';
  14.            $query = mysql_query("SELECT * FROM characters ORDER BY lvl DESC, login ASC");
  15.        }
  16.        break;
  17.            
  18.    case 'fights':
  19.        
  20.        if($_GET['by']=='z')
  21.        {
  22.            $by = '&by=a';
  23.            $query = mysql_query("SELECT (SUM( wins ) + SUM( loses )) AS fights FROM characters ORDER BY fights ASC, login ASC");
  24.        }
  25.        else
  26.        {
  27.            $by = '&by=z';
  28.            $query = mysql_query("SELECT (SUM( wins ) + SUM( loses )) AS fights FROM characters ORDER BY fights DESC, login ASC");
  29.        }
  30.        break;
  31.        
  32.    case 'wins':
  33.        if($_GET['by']=='z')
  34.        {
  35.            $by = '&by=a';
  36.            $query = mysql_query("SELECT * FROM characters ORDER BY wins ASC, login ASC");
  37.        }
  38.        else
  39.        {
  40.            $by = '&by=z';
  41.            $query = mysql_query("SELECT * FROM characters ORDER BY wins DESC, login ASC");
  42.        }
  43.        break;
  44.        
  45.    case 'loses':
  46.        if($_GET['by']=='z')
  47.        {
  48.            $by = '&by=a';
  49.            $query = mysql_query("SELECT * FROM characters ORDER BY loses ASC, login ASC");
  50.        }
  51.        else
  52.        {
  53.            $by = '&by=z';
  54.            $query = mysql_query("SELECT * FROM characters ORDER BY loses DESC, login ASC");
  55.        }
  56.        break;
  57.        
  58.    default:
  59.        if($_GET['by']=='z')
  60.        {
  61.            $by = '&by=a';
  62.            $query = mysql_query("SELECT * FROM characters ORDER BY login DESC");
  63.        }
  64.        else
  65.        {
  66.            $by = '&by=z';
  67.            $query = mysql_query("SELECT * FROM characters ORDER BY login ASC");
  68.        }
  69.        break;
  70. }
  71.  
  72. $i=1;
  73. echo "<div class='rank_div'>";
  74. echo "<table border='1' class='rank_table'>";
  75. echo "<tr><td><b>Pozycja</b></td><td><b><a href='?cont=rank".$by."'>Nazwa postaci</a></b></td><td><b><a href='?cont=rank&sort=lvl".$by."'>Poziom</a></b></td><td><b><a href='?cont=rank&sort=fights".$by."'>Stoczonych walk</a></b></td><td><b><a href='?cont=rank&sort=wins".$by."'>Wygranych</a></b></td><td><b><a href='?cont=rank&sort=loses".$by."'>Przegranych</a></b></td>";
  76. while($char = mysql_fetch_array($query))
  77. {
  78.    echo "<tr><td>".$i."</td>";
  79.    echo "<td>".$char['login']."</td>";
  80.    echo "<td>".$char['lvl']."</td>";
  81.    $fights = $char['wins']+$char['loses'];
  82.    echo "<td>".$fights."</td>";
  83.    echo "<td>".$char['wins']."</td>";
  84.    echo "<td>".$char['loses']."</td></tr>";
  85.    $i++;
  86. }
  87. echo "</table>";
  88. echo "</div>";
  89. ?>


Przepraszam, że się tak pospieszyłem :/

Przepraszam, że piszę posta pod postem, ale temat zaginął, a nie chciałbym tworzyć nowego...
Czy jest możliwe w ogole takie coś co chce osiągnąć? Czy muszę tworzyć w bazie nową kolumnę z wszystkimi walkami?

Ten post edytował grzegosh 16.07.2009, 19:02:33
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 00:46