Una columna es ambigua cuando en un JOIN se invoca a una columna que aparece en dos tablas al mismo tiempo con ese nombre.
Normalmente, desde la optica de las bases de datos, implica que hay una definición de nombres de tablas incorrecto (las buenas practicas dicen que dos tablas diferentes no deben llevar nombres de campos iguales jamás, por lo que suele anteponerse un prefijo a los mismos).
En tu caso es un defecto producto de suprimir los alias en algunos casos en el WHERE.
Si tomamos de base tu consulta original, podemos reconstruir cómo debe ser ese script, pero con algunos ajustes.
Probemos:
Código PHP:
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'];
$condicion = "";
$orden = "";
// Condicion
if (!empty($vte)) {$condicion = "A.telefonos='$vte')";} {$condicion = "A.movil = '$movil'";}
else {$condicion .= "AND A.movil = '$movil'";}
{$condicion = "calle A.dni = '$dni'";}
else {$condicion .= "AND A.dni = '$dni'";}
{$condicion = "B.calle like '%$calle%'";}
else {$condicion .= "AND B.calle LIKE '%$calle%'";}
{$condicion = " A.apellidos LIKE '%$ape%'";}
else {$condicion .= "AND A.apellidos LIKE '%$ape%'";}
{$condicion = "A.`name` LIKE '%$name%'";}
else {$condicion .= "AND A.`name` LIKE '%$name%'";}
{$condicion = "B.localidad LIKE '%$loca%'";}
else {$condicion .= "AND B.localidad LIKE '%$loca%'";}
if(empty ($condicion)) {$condicion = " 1 ";}
// Ordenar por
$vorder = $_POST['orderby'];
if ($vorder != '') {
$orden= " ORDER BY " . $vorder;
}
$sql = "SELECT ";
$sql .= " 0 qnum, ";
$sql .= " A.id_aviso, ";
$sql .= " A.telefonos, ";
$sql .= " A.telefonos3, ";
$sql .= " A.movil, ";
$sql .= " A.dni, ";
$sql .= " A.`name`, ";
$sql .= " A.apellidos, ";
$sql .= " B.localidad, ";
$sql .= " B.calle ";
$sql .= "FROM ";
$sql .= " clientes A INNER JOIN dir_clientes B ON A.id_aviso=B.id_aviso ";
$sql .= "WHERE ";
$sql .= " B.calle != '' AND $condicion ";
$sql .= "UNION ALL ";
$sql .= "SELECT ";
$sql .= " 1 qnum, ";
$sql .= " id_aviso, ";
$sql .= " telefonos, ";
$sql .= " telefonos3, ";
$sql .= " movil, ";
$sql .= " dni, ";
$sql .= " `name`, ";
$sql .= " apellidos, ";
$sql .= " localidad, ";
$sql .= " calle ";
$sql .= "FROM ";
$sql .= " avisos ";
$sql .= "WHERE ";
$sql .= " $condicion ";
$sql .= "UNION ALL ";
$sql .= "SELECT ";
$sql .= " 2 qnum, ";
$sql .= " A.id_aviso, ";
$sql .= " A.telefonos, ";
$sql .= " A.telefonos3, ";
$sql .= " A.movil, ";
$sql .= " A.dni, ";
$sql .= " A.`name`, ";
$sql .= " A.apellidos, ";
$sql .= " B.localidad, ";
$sql .= " B.calle ";
$sql .= "FROM ";
$sql .= " usuarios A INNER JOIN dir_usuarios B ON A.id_aviso=B.id_aviso ";
$sql .= "WHERE ";
$sql .= " B.calle != '' ";
$sql .= " AND $condicion ";
$sql .= "$orden";
// Verificamos la consulta
echo $sql;
// Ejecutando consulta
if (!$sql) {
}
'id_aviso' => $row['id_aviso'],
'telefonos' => $row['telefonos'],
);
}
// convertimos el array de datos a formato json
/* Tienes resultados. */
}
}
?>