Ver Mensaje Individual
  #36 (permalink)  
Antiguo 26/02/2013, 03:42
Avatar de satjaen
satjaen
 
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 12 años, 4 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
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. ?>
Gonzalo, gracias pero este código no funciona nada y creo que es porque las condiciones que pones duplicas los AND en los if y tambien en los sql, no?

De todas formas te pongo el código completo actual que funciona bien salvo la búsqueda por calle. La base de datos funciona bien porque sino el código de el principio del post de muchos sqls tampoco funcionaría.

Código PHP:
<?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 "";
 
     
// crear parametros
    
$condicion "";
    
    if ( ! empty(
$vte)) {
    
$condicion "telefonos='$vte'";
    }
    if ( ! empty(
$movil)) {
    
$condicion "movil = '$movil'";
    }
    if ( ! empty(
$dni)) {    
    
$condicion "dni = '$dni'";
    }
    if ( ! empty(
$name)) {    
    
$condicion "name LIKE '%$name%'";
    }
    if ( ! empty(
$ape)) {    
    
$condicion "apellidos LIKE '%$ape%'";
    }
    if ( ! empty(
$calle)) {    
    
$condicion "calle LIKE '%$calle%'";
    }
    if ( ! empty(
$loca)) {    
    
$condicion "localidad LIKE '%$loca%'";
    }  
    
    
// Ordenar por
    
$vorder $_POST['orderby'];
 
    if (
$vorder != '') {
        
$orden" ORDER BY " $vorder;
    }
 
    
$sql "SELECT 
                0 qnum, 
                A.id_aviso, 
                A.telefonos, 
                A.telefonos3, 
                A.movil, 
                A.dni, 
                A.name, 
                A.apellidos, 
                B.localidad, 
                B.calle
            FROM 
                clientes A INNER JOIN dir_clientes B  ON A.id_aviso=B.id_aviso 
            WHERE 
                B.calle != '' AND $condicion
            UNION ALL
            SELECT 
                1 qnum, 
                id_aviso, 
                telefonos, 
                telefonos3, 
                movil, 
                dni, 
                name, 
                apellidos, 
                localidad, 
                calle
            FROM 
                avisos 
            WHERE 
                $condicion
            UNION ALL
            SELECT 
                2 qnum, 
                U.id_aviso, 
                U.telefonos, 
                U.telefonos3, 
                U.movil, 
                U.dni, 
                U.name, 
                U.apellidos, 
                D.localidad, 
                D.calle
            FROM 
                usuarios U INNER JOIN dir_usuarios D ON  U.id_aviso=D.id_aviso 
            WHERE
                D.calle != '' 
                AND  $condicion"
;
 
  
 
    
// Ejecutando consulta
    
$query mysql_query($sql);
    
if (!
$sql) {
        die(
'Consulta no válida: ' mysql_error());
        }
    if (
mysql_num_rows($query) > 0) {
 
      
$datos = array(); 
     
    while(
$row mysql_fetch_array($query)) 
    { 
          if(
$row["qnum"]==0$style="";
          if(
$row["qnum"]==1)$style="background-color:yellow";
          if(
$row["qnum"]==2)$style="background-color:orange";
    
    
    
        
$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']),
            
'style'       =>  $style
            
            
        
); 
    } 
    
// convertimos el array de datos a formato json 
     
echo json_encode($datos);
/* Tienes resultados. */
    
}else{
/*No tienes resultados. */
    
echo '[]';
        }
  }
?>
Un saludo