Zlecono mi dodanie paru rzeczy do pewnego serwisu z ogłoszeniami. Niestety jedną z kluczowych modyfikacji jest wprowadzenie możliwości sortowania.
Niestety dlatego, że autor strony, aby wygenerować tabelę HTML z listą dodanych do bazy ogłoszeń skorzystał z wczytywania danych z kilku różnych tabel MySQL pakując pobrane dane do jednej tabeli wygenerowanej do HTML. Jest teraz problem z sortowaniem.
Z sortowaniem nie ma problemu jeśli dane do HTML pobierane są z jednej tabeli MySQL. Lecz co zrobić, aby można było w sposobie jakim się posłużył autor skryptu, umożliwić jeszcze sortowanie takiej tabeli na podstawie wybranej kolumny, jeśli zawartość takich kolumn pochodzi z kilku tabel MySQL?
Mam przygotowane już pole SELECT z którego wybiera się metodę sortowania
<select name="sortuj" style="text-transform: none; font-size: 12px" onchange="location = this.value;"> <?php if(($_SERVER['REQUEST_URI'] == "/") OR ($_SERVER['REQUEST_URI'] == "/index.php")) $char="http://strona.pl/index.php?"; elseif($_GET['sort']) { $char = "".$_SERVER['REQUEST_URI'].""; } else $char = "http://strona.pl".$_SERVER['REQUEST_URI']."&"; ?> </select>
Po wybraniu danej opcji z pola SELECT wskakuje strona z odpowiednią zawartością zgodną z wartością value pola OPTION, np. [ http://strona.pl/index.php?sort=rodzaj&order=DESC ].
Problem polega na tym, że PHP pętle opiera na zapytaniu z jednej tabeli, a wewnątrz pętli dopiero dobiera resztę danych potrzebnych do wygenerowania tabeli HTML.
<?php $rezultat = "SELECT * FROM wolne_ladunki ORDER BY ".$_GET['sort']." ".$_GET['order']." LIMIT $od, 30"; } else { $rezultat = "SELECT * FROM wolne_ladunki ORDER BY data_zgloszenia DESC, godzina_zgloszenia DESC LIMIT $od, 30"; } $odlicz = 1; $rezultat2 = "SELECT dzien,miesiac,rok,panstwo,miasto,kod FROM zaladunek WHERE id_zaladunek='$row[1]'"; $rezultat3 = "SELECT dzien,miesiac,rok,panstwo,miasto,kod FROM rozladunek WHERE id_rozladunek='$row[2]'"; $rezultat4 = "SELECT rodzaj_ladunku FROM ladunek WHERE id_ladunek='$row[3]'"; $rezultat5 = "SELECT * FROM oplaty WHERE id_oplata='$row[4]'"; $row5[1]; $cena_rozbij = explode(".", $row5[1]); if($cena_rozbij[1]==00) { $cena = $cena_rozbij[0]; } else { $cena=$row5[1]; } ?> <td class="tabela_komorka center" width="90"> <div class="table mauto"> <div class="table-cell va-middle" style="background-color: #3aa910; padding: 10px 15px"><i class="icon-inbox text-white" style="font-size: 16px"></i></div> <div class="table-cell"> <div class="table-row"><strong class="dater bg-darkgrey text-white"><?=$row2[2]?>.<?=$row2[1]?>.<?=$row2[0]?></strong></div> <div class="table-row"><strong class="dater bg-head text-white"><?=$row3[2]?>.<?=$row3[1]?>.<?=$row3[0]?></strong></div> </div> </div> </td> <td class="tabela_komorka center" width="130"><?=$row2[3]?><br /><?=ucwords($row2[4])?><br /><?=$row2[5]?></td> <td class="tabela_komorka center" width="130"><?=$row3[3]?><br /><?=ucwords($row3[4])?><br /><?=$row3[5]?></td> <td class="tabela_komorka center thistype" width="100"><?=$row4[0]?></td> <td class="tabela_komorka center" width="100"><strong><?=$row[6]?></strong><br /><?=$row[7]?></td> <td class="tabela_komorka center" width="104"><a class="przycisk_szczegoly btn blue uppercase" style="font-weight: 800; font-size: 10px; font-family: 'Open Sans';" href="index.php?k=wolne-ladunki&szczegoly=<?=$row[0]?>"><i class="icon-eye-open"></i> Zobacz</a></td> </tr> <? $odlicz++; }
Z tego powodu sortowanie łatwo zrobić tylko dla jednej kolumny wygenerowanej tabeli HTML. Sortowanie kolumn z uzupełniającymi tabelę danymi pobieranymi wewnątrz pętli jest dla mnie nie do przejścia. Siedzę nad tym praktycznie już 12h i nawet o krok nie posunąłem się do przodu. Potrafię zrobić jedynie sortowanie jednej kolumny, tej z zapytania generującego pętle.
Czy jest ktoś kto mógłby mi pomóc znaleźć jakieś rozwiązanie? Byłbym wdzięczny.