Autor Zpráva
Casper
Profil
Zdravím, mám výpis dat z sql tabulky, který pak může uživatel řadit. Zároveň však potřebuji pro výpis dat z db uplatnit stránkování. Tím ovšem vzniká problém s řazením, protože systém sežadí všechna data z tabulky, ne jen ta co zobrazuje (určeno limitem z stránkování). Čímž např na druhé stránce vidím záznamy 6,7,8,9,10, ale po seřazení dle nějakého parametru se mi klidně mohou objevit záznamy 2,6,1,5,9 což není pro uživatele ideální. Proto se ptám, zdali je možné nějak definovat: nejprve vyber tyhle záznamy(dle limitu) a jen ty seřad. Zkoušel jsem v sql příkazu dát order by až za limit, to ovšem pravděpodobně není možné. Pak mě napadlo řešení přes array, ale v toms e mi hrabat nechce, neexistuje nějaké schůdné řešení?

celé schéma kodu jsem zkrátil:

<a href="<?php echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."&razeni=nick"; ?>">Řadit dle nicku</a> 
<!--zde se nelekejte &, URL vždy obsahuje nějaký GET se začátkem (?)-->
 
          <?
            if (isset($_GET['razeni'])){
            $_SESSION['razeni'] = $_GET['razeni'];
            }
            if (!isset($_GET['razeni']) and !isset($_SESSION['razeni'])){
            $_SESSION['razeni'] = "id";
            }
            
          /*inicializace řádkování*/
               $radku = mysql_num_rows(mysql_query("SELECT id FROM registrace"));
               $po = 2; // počet záznamů na stránku
               $max_stranek = ceil($radku / $po); // počet stránek
               $url_stranka = ($_GET["str"] / $po) + 1; // Aktuální stránka
                if(empty($_GET["str"])) {$stranka = 0;} else {$stranka = $_GET["str"];}
          /*inicializace řádkování*/
          
          $cist = mysql_query("SELECT klan, nick, login, icq, ip_adresa, datum, poznamka FROM registrace 
                              ORDER BY ".$_SESSION['razeni']." ASC LIMIT ".intval($stranka).",$po") or die (mysql_error());

          while($data = mysql_fetch_assoc($cist)) {
          //výpis dat
          }

          /*řádkování zobrazení*/
              echo 'Stránky: ';
              for($i=0; $i < $max_stranek; $i++) {
              $cislo = ($i + 1);
              $url_cislo = ($cislo * $po) - $po;
              if($url_stranka != $cislo) {
              echo " <a href=\"?str=".$url_cislo."\">[".($i + 1)."]</a> ";
              } else {
              echo "".($i + 1)."";
              }
              }
         /*řádkování zobrazení*/
         ?>
AM
Profil *
Všude se to dělá tak, že když dáš řadit podle jiného kritéria, tak se to podle něj seřadí celé a vypíše se jen daná stránka, přesně jak říkáš. Představ si třeba, že na e-shopu budeš mít 5 stránek zboží a dáš si je seřadit podle ceny. Já bych očekával, že na první stránce bude zboží nejlevnější a na páté nejdražší, ne že se mi seřadí jen v rámci dané stránky, to by bylo malinko k ničemu :) a nedovedu si představit, v jakém jiném případě by to k něčemu bylo.
Casper
Profil
Máš naprostou pravdu, ale pokud bych to skutečně potřeboval takhle ? :) je nějaké řešení ?
Alphard
Profil
asi poddotazem
... where id in (select id from ...
nebo
select * from (select ...) t order by id

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: