Cita:
Iniciado por dashtrash No.Me refiero a que no se repite la query entera por cada filtro posible.La query se escribe una vez, y luego se le concatena el filtro calculado.Lo mismo que haces con el order by.
Si ese filtro, además, se puede calcular de forma sencilla, mejor.
En tu php hay 17 queries casi completas.Debería haber 3.
Gracias, mira lo hecho así, pero no me sale:
Código Javascript
:
Ver original<?php
include("Connections/conexion.php");
if ($_GET["action"] == "listar")
{
// valores recibidos por POST
$vte = $_POST['telefonos'];
$ape = $_POST['apellidos'];
$name = $_POST['name'];
$dni = $_POST['dni'];
$calle = $_POST['calle'];
$movil = $_POST['movil'];
$loca = $_POST['localidad'];
$vars=array("vte"=>"U.telefonos",
"movil"=>"U.movil",
"calle"=>"D.calle",
"loca"=>"D.localidad"
);
foreach($vars as $key=>$value)
{
if(isset($$key))
$filters[]=$value." like '%".($$key)."%'";
}
$sql = "(SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
FROM clientes U,dir_clientes D
WHERE U.id_aviso=D.id_aviso AND D.calle != '' AND ".implode(" AND ",$filters).";)
UNION ALL
(SELECT id_aviso,telefonos,name,apellidos,localidad,calle FROM avisos WHERE ".implode(" AND ",$filters).";)
UNION ALL
(SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
FROM usuarios U,dir_usuarios D
WHERE U.id_aviso=D.id_aviso AND D.calle != '' AND ".implode(" AND ",$filters).";)";
// Ordenar por
$vorder = $_POST['orderby'];
if($vorder != ''){
$sql .= " ORDER BY ".$vorder;
}
$query = mysql_query($sql);
if (mysql_num_rows($query) > 0) {
$datos = array();
while($row = mysql_fetch_array($query))
{
$datos[] = array(
'id_aviso' => $row['id_aviso'],
'telefonos' => $row['telefonos'],
'name' => utf8_encode($row['name']),
'apellidos' => utf8_encode($row['apellidos']),
'calle' => utf8_encode($row['calle']),
'localidad' => utf8_encode($row['localidad'])
);
}
// convertimos el array de datos a formato json
echo json_encode($datos);
/* Tienes resultados. */
}
}
?>