Ver Mensaje Individual
  #35 (permalink)  
Antiguo 25/02/2013, 17:56
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 2 meses
Puntos: 2658
Respuesta: Listar resultados de tres consultas.

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
  1. <?php
  2.  
  3. include("Connections/conexion.php");
  4. if ($_GET["action"] == "listar") {
  5.     // valores recibidos por POST
  6.     $vte = $_POST['telefonos'];
  7.     $ape = $_POST['apellidos'];
  8.     $name = $_POST['name'];
  9.     $dni = $_POST['dni'];
  10.     $calle = $_POST['calle'];
  11.     $movil = $_POST['movil'];
  12.     $loca = $_POST['localidad'];
  13.  
  14.     $condicion = "";
  15.     $orden = "";
  16.  
  17.     // Condicion
  18.         if (!empty($vte)) {$condicion = "A.telefonos='$vte')";}
  19.     if(empty ($condicion))
  20.         {$condicion = "A.movil = '$movil'";}
  21.         else {$condicion .= "AND A.movil = '$movil'";}
  22.     if(empty ($condicion))
  23.         {$condicion = "calle A.dni = '$dni'";}
  24.         else {$condicion .= "AND A.dni = '$dni'";}
  25.     if(empty ($condicion))
  26.         {$condicion = "B.calle like '%$calle%'";}
  27.         else {$condicion .= "AND B.calle LIKE '%$calle%'";}
  28.     if(empty ($condicion))
  29.         {$condicion = " A.apellidos  LIKE '%$ape%'";}
  30.         else {$condicion .= "AND A.apellidos  LIKE '%$ape%'";}
  31.     if(empty ($condicion))
  32.         {$condicion = "A.`name` LIKE '%$name%'";}
  33.         else {$condicion .= "AND A.`name` LIKE '%$name%'";}
  34.     if(empty ($condicion))
  35.         {$condicion = "B.localidad LIKE '%$loca%'";}
  36.         else {$condicion .= "AND B.localidad LIKE '%$loca%'";}
  37.     if(empty ($condicion)) {$condicion = " 1 ";}
  38.  
  39.  
  40.     // Ordenar por
  41.     $vorder = $_POST['orderby'];
  42.  
  43.     if ($vorder != '') {
  44.         $orden= " ORDER BY " . $vorder;
  45.     }
  46.  
  47.     $sql = "SELECT ";
  48.     $sql .= "   0 qnum,  ";
  49.     $sql .= "   A.id_aviso, ";
  50.     $sql .= "   A.telefonos,  ";
  51.     $sql .= "   A.telefonos3,  ";
  52.     $sql .= "   A.movil,  ";
  53.     $sql .= "   A.dni,  ";
  54.     $sql .= "   A.`name`,  ";
  55.     $sql .= "   A.apellidos,  ";
  56.     $sql .= "   B.localidad,  ";
  57.     $sql .= "   B.calle ";
  58.     $sql .= "FROM  ";
  59.     $sql .= "   clientes A INNER JOIN dir_clientes B  ON A.id_aviso=B.id_aviso  ";
  60.     $sql .= "WHERE  ";
  61.     $sql .= "   B.calle != '' AND $condicion ";
  62.     $sql .= "UNION ALL ";
  63.     $sql .= "SELECT  ";
  64.     $sql .= "   1 qnum, ";
  65.     $sql .= "   id_aviso,  ";
  66.     $sql .= "   telefonos,  ";
  67.     $sql .= "   telefonos3,  ";
  68.     $sql .= "   movil,  ";
  69.     $sql .= "   dni,  ";
  70.     $sql .= "   `name`,  ";
  71.     $sql .= "   apellidos,  ";
  72.     $sql .= "   localidad,  ";
  73.     $sql .= "   calle ";
  74.     $sql .= "FROM  ";
  75.     $sql .= "   avisos  ";
  76.     $sql .= "WHERE  ";
  77.     $sql .= "   $condicion ";
  78.     $sql .= "UNION ALL ";
  79.     $sql .= "SELECT  ";
  80.     $sql .= "   2 qnum, ";
  81.     $sql .= "   A.id_aviso, ";
  82.     $sql .= "   A.telefonos,  ";
  83.     $sql .= "   A.telefonos3,  ";
  84.     $sql .= "   A.movil,  ";
  85.     $sql .= "   A.dni,  ";
  86.     $sql .= "   A.`name`,  ";
  87.     $sql .= "   A.apellidos,  ";
  88.     $sql .= "   B.localidad,  ";
  89.     $sql .= "   B.calle ";
  90.     $sql .= "FROM  ";
  91.     $sql .= "   usuarios A INNER JOIN dir_usuarios B ON  A.id_aviso=B.id_aviso  ";
  92.     $sql .= "WHERE ";
  93.     $sql .= "   B.calle != ''  ";
  94.     $sql .= "   AND  $condicion ";
  95.     $sql .= "$orden";
  96.  
  97.     // Verificamos la consulta
  98.     echo $sql;
  99.  
  100.     // Ejecutando consulta
  101.     $query = mysql_query($sql);
  102.    
  103. if (!$sql) {
  104.         die('Consulta no válida: ' . mysql_error());
  105.         }
  106.     if (mysql_num_rows($query) > 0) {
  107.  
  108.         $datos = array();
  109.  
  110.         while ($row = mysql_fetch_array($query)) {
  111.             $datos[] = array(
  112.                 'id_aviso' => $row['id_aviso'],
  113.                 'telefonos' => $row['telefonos'],
  114.                 'name' => utf8_encode($row['name']),
  115.                 'apellidos' => utf8_encode($row['apellidos']),
  116.                 'calle' => utf8_encode($row['calle']),
  117.                 'localidad' => utf8_encode($row['localidad'])
  118.             );
  119.         }
  120.         // convertimos el array de datos a formato json
  121.         echo json_encode($datos);
  122.         /* Tienes resultados. */
  123.     }
  124. }
  125. ?>
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)