oracle / php => sortowanie po kliknięciu kolumny nagłówka
2011-05-09 19:22:18
Post #1
gość_fuchsd
Witam,
czy ktoś może mi pomóc i doradzić jak wstawić sortowanie do wyświetlonego selecta?
Chciałabym po kliknięciu na nazwę kolumny przesortować to, co zwrócił mi select.
Niestety nigdzie nie ma tutoriali dot. oracle.
Mój kod bez sortowania (kod działa poprawnie) Z góry dziękuję za pomoc.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ret=oci_execute($stmt);
$nrows=oci_fetch_all($stmt,$results);
if ($nrows>0)
{echo "<table border='1' align='center' bordercolor='gray' cellspacing='0' cellpadding='5'> \n";
echo "<tr>\n";
foreach ($results as $key => $val)
{ echo "<th bgcolor='#FF9900' height='20' align='center'> <font color='white' face='verdana' size='2'> $key </font> </th> \n";
}
echo "</tr>\n";
for ($i=0; $i<$nrows; $i++) {
echo "<tr>\n";
foreach ($results as $data){
if($data[$i] == null)
{
echo "<td bgcolor='white' align='center'> <FONT COLOR='black' FACE='verdana' align='center' SIZE='3'>   </FONT> </td>\n";
}
else
{
echo "<td bgcolor='white' > <FONT COLOR='black' FACE='verdana' SIZE='2'> $data[$i] </font> </td> \n";
}
2011-05-10 07:27:04
Post #2
nospor
ORACLE za bardzo tutaj nie ma nic do gadania. Twoje zadanie robić należy tak samo niezależnie czy to oracle czy mysql.
Jeśli pojawi się w url pole do sortowania to poprostu dodajesz to sortowanie do zapytania.
1
2
3
4
5
<?php
$sql = 'select * from tabela';
if (!empty($_GET['costam']))
$sql.=' order by jakiespole desc';
?>
2011-05-10 08:50:50
Post #3
gość_fuchsd
A jak dodać pole do sortowania?
chodzi o dynamiczne sortowanie po kliknięciu na nagłówek kolumny.
Na razie jest on statyczny. Czy mogę prosić o jaśniejsze wytłumaczenie? z góry serdecznie dziękuję.
2011-05-10 09:26:58
Post #4
nospor
no tworząc nagłówek kolumny robisz z niej link:
1
2
3
4
5
6
7
8
9
10
<table>
<tr>
<th>
<a href="linkdoskryptu.php?sortname=kol1&sortdir=asc">Kolumna 1</a>
<a href="linkdoskryptu.php?sortname=kol2&sortdir=asc">Kolumna 2</a>
</th>
</tr>
<tr>Tutaj dane z bazy</tr>
</table>
Te sortdir to tworzysz oczywiście dynamicznie na podstawie tego czy jest już sortowanie po danej kolumnie czy nie i ustawiasz asc albo desc
A teraz w kodzie php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
<?php
$sql = 'select * from tabela';
if (!empty($_GET['sortname'])){
$kol = '';
if ($_GET['sortname'] == 'kol1')
$kol = 'kol1';
elseif ($_GET['sortname'] == 'kol2')
$kol = 'kol2';
if ($kol){
$dir = $_GET['sortdir'] == 'asc' ? 'asc' : 'desc';
}
$sql.=" order by $kol $dir";
}
?>
U mnie w dziale download masz klasę PAGER. Jest też tam nakładka EPAGER, która takie rzeczy jak sortowanie robi za nas automatycznie.
2011-05-10 09:37:41
Post #5
gość_fuchsd
No właśnie musze to kodem zrobić : /
Ja wyciagam nazwy w taki sposób:
1
2
3
4
5
6
7
foreach ($results as $key => $val)
{ echo "<th bgcolor='#FF9900' height='40' align='center'> <font color='white' face='verdana' size='2'> $key
<font> </th> \n";
}
echo "</tr>\n";
jak mam zatem zmodyfikować kod, żeby mi numerował kolumny? dziękuje bardzo
2011-05-10 09:38:49
Post #6
nospor
To przecież ci podałem kod. Jedyne co musisz zrobic to wstawić to przez php. No weź trochę pomyśl. Wkońcu to ty semestr zaliczasz więc jakieś podstawy wypadałoby mieć.
2011-05-10 09:39:14
Post #7
gość_fuchsd
Kod jeszcze raz:
tak wyciągam nazwy kolumn z bazy:
1
2
3
4
5
6
7
8
9
foreach ($results as $key => $val)
{ echo "<th bgcolor='#FF9900' height='40' align='center'>
<font color='white' face='verdana' size='2'>
$key
<font> </th> \n";
}
echo "</tr>\n";
2011-05-10 09:50:04
Post #8
nospor
Przecież podałaś to już w poprzednim poście. Niczym ten kod się nie rożni.
2011-05-10 10:45:22
Post #9
gość_fuchsd
ok, dziala, serdecznie dziekuje

faktycznie, nie było to trudne
a jak zmodyfikować kod, żeby po drugim kliknięciu w nazwę kolumny sortował desc ?
bo na razie sortuje tylko asc.
2011-05-10 10:56:58
Post #10
nospor
Cieszę się, że ruszyłaś wkońcu głową
Co do desc:
Masz tę swoją pętlę, w której generujesz nagłówki.
Załóżmy, że aktualnie sortowana kolumna z GET to kol1.
Lecisz więc sobie w tej pętli, i patrzysz: jeśli kolumna z pętli=kol1 i sortowanie równa się asc, to ty dla nagłówka masz ustawić desc. W każdym innym przypadku pozostaje asc
2011-05-10 11:01:50
Post #11
gość_fuchsd
Też się cieszę
Tak właśnie myślałam odnośnie sortowania.
Odpowiedz