Autor | Zpráva | ||
---|---|---|---|
Casper Profil |
#1 · Zasláno: 24. 1. 2009, 17:58:05 · Upravil/a: Casper
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 * |
#2 · Zasláno: 24. 1. 2009, 18:24:45
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 |
#3 · Zasláno: 24. 1. 2009, 18:33:16
Máš naprostou pravdu, ale pokud bych to skutečně potřeboval takhle ? :) je nějaké řešení ?
|
||
Alphard Profil |
#4 · Zasláno: 24. 1. 2009, 18:46:32
asi poddotazem
... where id in (select id from ... nebo select * from (select ...) t order by id |
||
Časová prodleva: 15 let
|
0