Autor Zpráva
mackopu
Profil
Pro přepínání třídění výpisu databáze používám následující vlastní konstrukci:
<?php

// pole s popisy sloupců
$nazvy_sloupcu = array(
"Pers. číslo",
"IP adresa",
"Čas vstupu");
// pole s názvy sloupců
$tridene_sloupce = array(
"personalni_cislo",
"ip_adresa",
"datum");
$pocet_sloupcu = Count($nazvy_sloupcu);
$prvni_trideni = $tridene_sloupce[2]; // podle třetího sloupce

$sort = $GLOBALS["sort"];

if(!isset($sort)) {
$sort = "ORDER BY ".$prvni_trideni." DESC";
}

echo "<table class=\"text\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">
<tr>
<td>
<table cellspacing=\"0\" cellpadding=\"3\" border=\"0\" class=\"text\" width=\"100%\">
<tr bgcolor=\"gray\">";
for($i=0; $i<$pocet_sloupcu; $i++) {
if($sort == "ORDER BY ".$tridene_sloupce[$i]." DESC") {
$jak = " ASC"; $popisek = "třídit vzestupně";
} else {
$jak = " DESC"; $popisek = "třídit sestupně";
}
echo "<th align=\"left\"><a style=\"color: #FFFFFF\" href=\"".$PHP_SELF."?codelat=vypsat_pristupy&sort=ORDER BY ".$tridene_sloupce[$i].$jak."\" title=\"$popisek\">".$nazvy_sloupcu[$i]."</a></th>\n";
}
$tabulka = "pristupy";
$vyber = implode(", ", $tridene_sloupce);
$dotaz = mysql_query("SELECT $vyber FROM $tabulka $podminka $sort");
$pocet = mysql_num_rows($dotaz);
echo "</tr>\n";
// následuje samotný výpis
?>

Zdá se mi to ale zbytečně komplikované. Neznáte někdo něco šikovnějšího, např. pomocí podmíněného operátoru?
Díky za každý podnět.
kaifman
Profil
http://dblib.sourceforge.net
mackopu
Profil
To je nějaká třída a než se v tom vyznám, tak zestárnu :-) Něco jednoduššího by nebylo? Nějaký příklad, který si budu moci modifikovat?
23k_work
Profil *
Nevim me to slozity nepripada, je to normalni. V phpku nebudes preci furt psat ECHO, INCLUDE...

a jestli Ti jde o myslenkovitost tak nevim, ja mam neco podobneho, jeste delsiho a "blbějšího". Bud v klidu :)
mackopu
Profil
No, představoval jsem si něco jako:
<a  href=\"".$PHP_SELF."?codelat=vypsat_pristupy&sort=ORDER BY personalni_cislo $jak\" title=\"$popisek\">Pers. číslo</a>

...přičemž to $jak by se samo přepínalo na ASC nebo DESC v závislosti na tom, co tam bylo předtím. Zaboha na to nemůžu kápnout, dneska mi to fakt nemyslí.
Kajman
Profil *
A co parametr sort=cislo?

A pak pouzit ORDER BY $cislo a třeba když je číslo záporné, použít ORDER BY ".$cislo*-1." DESC.

Prostě dát do toho selectu pořadové číslo sloupce, podle kterého se to má řadit.

A dobré bývá zachovat si minulé třídění a použít ho při rovnosti... třeba sortold=cislo2 -
order by cislo, cislo2.
mackopu
Profil
Dalo to šichtu, ale myslím, že jsem to nakonec zjednodušil. Rád se podělím:
// na začátku třídíme data sestupně

$orderby = $GLOBALS["orderby"];
$jak = $GLOBALS["jak"];
if(empty($orderby))$orderby = "id";
if(empty($jak))$jak = "DESC";
if($jak == "DESC") {
$jak = "ASC";
$popisek = "seřadit vzestupně";
} else {
$jak = "DESC";
$popisek = "seřadit sestupně";
}
$seradit = "ORDER BY $orderby $jak";

$tabulka = "tabulka";
$dotaz = mysql_query("SELECT * FROM $tabulka $podminka $seradit");

A volání:
<a href=\"?codelat=orderby=sloupec&jak=$jak\" title=\"$popisek\">Sloupec</a>
mackopu
Profil
Dalo to šichtu, ale myslím, že jsem to nakonec zjednodušil. Rád se podělím:
// na začátku třídíme data sestupně

$orderby = $GLOBALS["orderby"];
$jak = $GLOBALS["jak"];
if(empty($orderby))$orderby = "id";
if(empty($jak))$jak = "DESC";
if($jak == "DESC") {
$jak = "ASC";
$popisek = "seřadit vzestupně";
} else {
$jak = "DESC";
$popisek = "seřadit sestupně";
}
$seradit = "ORDER BY $orderby $jak";

$tabulka = "tabulka";
$dotaz = mysql_query("SELECT * FROM $tabulka $podminka $seradit");

A volání:
<a href=\"?codelat=orderby=sloupec&jak=$jak\" title=\"$popisek\">Sloupec</a>
Toto téma je uzamčeno. Odpověď nelze zaslat.

0