[php] sortowanie tabeli wg. kolumn

0

mam taką tabelę
I kolumna - Numer porządkowy
II kol. - Imie i nazwisko
III kol. - przedmiot
IV kol. sala
V - wychowawca

i chciałbym żeby to możnabyło dynamicznie sortować (tzn. nagłówki są inkami, i po kliknięciu na jeden z nich dynamicznie tabela sie sortuje)

a jeszcze zalezy mi na tym by można sortować wg. imion i osobno wg. nazwisk.

pomóżcie z tym

edit:

nie znam sie w ogóle na PHP :(

0

Sortować danych za bardzo sie nie da, ale mozesz je pobierac i wyświetlać róznymi zapytaniami. Np. link do sortowania wg sali

index.php?sortuj=sala&p=a -> wg. sali rosnąco
index.php?sortuj=sala&p=d -> wg. sali malejaco
index.php?sortuj=wychowawca&p=a -> wg. wchowawcy rosnąco
index.php?sortuj=wychowawca&p=d -> wg. wychowawcy malejaco

$order = ($_GET['p'] == 'a')? 'asc' : 'desc';

switch ($_GET['sortuj'])
{
    case 'sala':
        $field = " 'sala'";
    break;
    case 'wychowawca':
        $field = " 'wychowawca'";
    break;
    default:
        $field = " 'numer'";
}

$query = "SELECT pole,pole,pole ORDER BY $field $order";
0

jeżeli chcesz sortować tabelę niekoniecznie z sqla to musisz mieć taką strukturę:

$tabela = Array(
  0 => Array(pierwszakolumna_pierwszywiersz, pierwszakolumna_drugiwiersz, pierwszakolumna_trzeciwiersz),
  1 => Array(drugakolumna_pierwszywiersz, drugakolumna_drugiwiersz, drugakolumna_trzeciwiersz)
);

normalnie masz pewnie taką:

$tabela = Array(
  0 => Array(pierwszakolumna_pierwszywiersz, drugakolumna_pierwszywiersz),
  1 => Array(pierwszakolumna_drugiwiersz, drugakolumna_drugiwiersz),
  2 => Array(pierwszakolumna_trzeciwiersz, drugakolumna_trzeciwiersz)
);

jeśli nie dasz rady od razu dostać danych w takiej formie to możesz przekształcić drugą na pierwszą takimi np instrukcjami:

$tabelaout = Array();
foreach($tabelain as $wiersz){
  foreach($wiersz as $k => $v){
    $tabelaout[$k][] = $v;
  }
}

i potem sortowanie to już prosta sprawa:

array_multisort($tabelaout[0], SORT_STRING, SORT_ASC, $tabelaout[1], SORT_DESC, SORT_NUMERIC);

czyli po prostu wypisujesz tutaj które kolumny mają być posortowane i w jakiej kolejności mają być brane pod uwagę, czyli będzie posortowane rosnąco (SORT_ASC) jako stringi (SORT_STRING) w/g pierwszej kolumny ($tabelaout[0]) a jeśli rekordy w pierwszej kolumny będą identyczne to brana pod uwagę będzie druga kolumna ($tabelaout[1]) w/g której dane będą posortowane malejąco (SORT_DESC) jako liczby (SORT_NUMERIC)

lub możesz wyciągnąć tylko jedną kolumnę w/g której chcesz posortować:

$tabelaout = Array();
foreach($tabelain as $wiersz){
  $tabelaout[] = $wiersz[1]; // według drugiej kolumny (liczone od zera)
}

i potem:

array_multisort($tabelaout, $tabelain); // tabelain (wejsciowa) będzie posortowana według kolumny drugiej (tabelaout - wyciągnięta kolumna druga)

1 użytkowników online, w tym zalogowanych: 0, gości: 1