Yo lo hago poniendo algo así en mi query:
Código PHP:
SELECT * FROM tabla ORDER BY <?php echo $_GET['orden']; ?>
Y luego en los links de las cabeceras de las columnas pongo algo como:
Código HTML:
<a href="<?php echo $PHP_SELF; ?>?orden=fecha">Fecha</a>
Donde "fecha" es el nombre de la fila por la que quieres hacer el order by.
Con condicionales incluso es posible alterar el sentido... me explico:
Puedes hacer un:
Código PHP:
SELECT * FROM tabla ORDER BY <?php echo $_GET['orden']; ?> <?php echo $_GET['sentido']; ?>
Y en tu link:
Código PHP:
if($_GET['sentido']=="ASC") $sentido="DESC"; else $sentido="ASC";
<a href="<?php echo $PHP_SELF; ?>?orden=fecha&sentido=<?php $sentido; ?>">Fecha</a>
Espero que te sirva. Saludos