Hola buenas tengo la siguiente duda. Necesito realizar una ordenación en orden ascendente o descendente de las columnas de una tabla cargada desde una BD.
Esta ordenación se realiza al pulsar sobre (por ejemplo) columna nombre. la primera vez seria orden ascendente y si volvemos a pulsar descendente.
El problema reside en que no consigo cambiar el valor de la query de ASC a DESC.
Por favor help me haha.
P.D: presento los trozos de código pertinentes.
jQuery:
function ordenacion(ordenacion){
if(tipo=="ASC"){
tipo="DESC";
}else{
tipo="ASC";
}
if(ordenacion=="tdUser"){
ordenar= "order by nombreUsuario "+tipo;
}if(ordenacion=="tdNombre"){
ordenar= "order by nombrePropio "+tipo;
}if(ordenacion=="tdApellidos"){
ordenar= "order by apellidos "+tipo;
}if(ordenacion=="tdDni"){
ordenar="order by DNI "+tipo;
}if(ordenacion=="tdFecha"){
ordenar="order by fechaNacimiento "+tipo;
}
enviarConsulta();
}
function enviarConsulta(){
var dataString=ordenar;
$.ajax({
type: "POST",
url: "colocarTabla.php",
data: {info : dataString},
success: function(data){
$("#mostrarTabla").html(data);
}
});
}
Php:
$ordenar=$_POST['info']??"";
$busqueda="SELECT * FROM personas ".$ordenar;
$resultado = consulta($busqueda);
echo $busqueda;
$xml="<?xml version=\"1.0\"?>\n";
$xml.="<personas>";
while($dato=$resultado->fetch()){
$xml.= "<persona>";
$xml.= "<nombreUsuario>".$dato['nombreUsuario']."</nombreUsuario>";
$xml.= "<nombrePropio>".$dato['nombrePropio']."</nombrePropio>";
$xml.= "<apellidos>".$dato['apellidos']."</apellidos>";
$xml.= "<DNI>".$dato['DNI']."</DNI>";
$xml.= "<fechaNacimiento>".$dato['fechaNacimiento']."</fechaNacimiento>";
$xml.= "</persona>";
}
$xml.= "</personas>";
$personas=new SimpleXMLElement($xml);
?>
<table>
<tr>
<td><a id='tdUser' onClick="ordenacion('tdUser');">Usuario</a></td>
<td><a id='tdNombre' onClick="ordenacion('tdNombre');">Nombre</a></td>
<td><a id='tdApellidos' onClick="ordenacion('tdApellidos');">Apellidos</a></td>
<td><a id='tdDni' onClick="ordenacion('tdDni');">Dni</a></td>
<td><a id='tdFecha' onClick="ordenacion('tdFecha');">Fecha</a></td>
</tr>
<?php
foreach ($personas->persona as $fila){
echo "<tr><td>".$fila->nombreUsuario."</td>";
echo "<td>".$fila->nombrePropio."</td>";
echo "<td>".$fila->apellidos."</td>";
echo "<td>".$fila->DNI."</td>";
echo "<td>".$fila->fechaNacimiento."</td></tr>";
}
?>
</table>
Hola, no envíes código SQL por Ajax, envía sólo el nombre del campo por el que quieres filtrar y el tipo de ordenación y luego en PHP recoge los parámetros, filtra los y arma tu Query.
Otra cosa, no pases al query lo que viene directamente por post, debes filtrarlos antes.
Mira, yo entendí algo como esto y lo haría así.
HTML:
<input type="button" value"usuario" data="usuario" clases="ordenarTipo">
<Input type="button" value="nombre" data=nombre" clases="ordenarTipo">
Jquery:
$(".ordenarTipo").Click(function(){
Var tipo = $(this).attr("data");
$.ajax({
type: "POST",
url: "colocarTabla.php",
data: {
tipo: tipo
},
success: function(data){
$("#mostrarTabla").html(data);
}
});
});
Y ya en colocarTabla.php solo recoges el parámetro y haces un If dependiendo el valor que traiga:
<?php
$tipo = $_POST["tipo"];
If($tipo == "usuario"){
$consulta = SELECT * FROM personas ORDER BY nombreUsuario DESC
}else if($tipo== "nombre")
$consulta = SELECT *FROM personas ORDER BY nombrePropio DESC
?>
Ya depende de ti también pasar a la variable tipo el valor y como lo quieres, si ASC O DESC, suerte.