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'> &nbsp </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