Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Listar resultados de tres consultas.

Estas en el tema de Listar resultados de tres consultas. en el foro de PHP en Foros del Web. Perdón, pero ¿no viste que en la línea 97 del script que te pasé puse esta línea?: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original // Verificar ...

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



Perdón, pero ¿no viste que en la línea 97 del script que te pasé puse esta línea?:
Código PHP:
Ver original
  1. // Verificar la sentencia
  2.     echo $sql;

Eso se supone que hace que salga el contenido de en la pagina...
¿Lo verificaste, o es que borraste esa linea sin mirar el comentario?

¿Nunca has probado el contenido de las variables haciendo que se muestren en pantalla con simples echo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #32 (permalink)  
Antiguo 25/02/2013, 16:57
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 8 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje


Perdón, pero ¿no viste que en la línea 97 del script que te pasé puse esta línea?:
Código PHP:
Ver original
  1. // Verificar la sentencia
  2.     echo $sql;

Eso se supone que hace que salga el contenido de en la pagina...
¿Lo verificaste, o es que borraste esa linea sin mirar el comentario?

¿Nunca has probado el contenido de las variables haciendo que se muestren en pantalla con simples echo?
Perdona, que bueno lo de los ojos. A ver, es que el echo no me sale en pantalla, solo sale en firebug en la opción respuesta y solo sale la consulta sql. Si es eso lo que quieres me lo dices. Tambien aprobecho para que veas que me da un error cuando busco por calle:

Código MySQL:
Ver original
  1. SELECT                  
  2. 0 qnum,
  3.                 A.id_aviso,
  4.                 A.telefonos,
  5.                 A.telefonos3,
  6.                 A.movil,                  
  7. A.dni,                  
  8. A.name,
  9.                 A.apellidos,
  10.                 B.localidad,                  
  11. B.calle             FROM                  clientes A INNER JOIN dir_clientes B  ON A.id_aviso=B.id_aviso              WHERE                  B.calle != '' AND  calle LIKE '%JOSE FAJARDO%'
  12.             UNION ALL            
  13. SELECT                  
  14. 1 qnum,                  
  15. id_aviso,
  16.                 telefonos,                  
  17. telefonos3,                  
  18. movil,                  
  19. dni,                  
  20. name,                  
  21. apellidos,
  22.                 localidad,                  
  23. calle             FROM                  avisos              WHERE                  calle LIKE '%JOSE FAJARDO%'            
  24. UNION ALL            
  25.                 2 qnum,
  26.                 U.id_aviso,
  27.                 U.telefonos,
  28.                 U.telefonos3,                  
  29. U.movil,
  30.                 U.dni,
  31.                 U.name,                  
  32. U.apellidos,
  33.                 D.localidad,                  
  34. D.calle             FROM                  usuarios U INNER JOIN dir_usuarios D ON  U.id_aviso=D.id_aviso              WHERE                 D.calle != ''                  AND  calle LIKE '%JOSE FAJARDO%'
El error:
Código HTML:
Ver original
  1. <br /> <b>Warning</b>:  mysql_num_rows(): supplied argument is not a valid MySQL result resource in <b>C:\Inetpub\vhosts\xn--electrodiseo-khb.es\httpdocs\Wedserver\ajax.php</b> on line <b>103</b><br /> []

El error es en esta línea:
Código:
 if (mysql_num_rows($query)>0 ) {
EDITO: Perdonad lo del código desordenado, pero en la respuesta del servidor en firebug me sale así.

Última edición por satjaen; 25/02/2013 a las 17:05
  #33 (permalink)  
Antiguo 25/02/2013, 17:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Listar resultados de tres consultas.

Bueno, limpiando la consulta, está quedando así:
Código MySQL:
Ver original
  1.     0 qnum,
  2.     A.id_aviso,
  3.     A.telefonos,
  4.     A.telefonos3,
  5.     A.movil,                  
  6.     A.dni,
  7.     A.name,
  8.     A.apellidos,
  9.     B.localidad,
  10.     B.calle
  11.     clientes A INNER JOIN dir_clientes B  ON A.id_aviso=B.id_aviso
  12.     B.calle != ''
  13.     AND  calle LIKE '%JOSE FAJARDO%'
  14. UNION ALL            
  15.     1 qnum,
  16.     id_aviso,
  17.     telefonos,
  18.     telefonos3,
  19.     movil,
  20.     dni,
  21.     name,
  22.     apellidos,
  23.     localidad,
  24.     calle
  25.     avisos
  26.     calle LIKE '%JOSE FAJARDO%'            
  27. UNION ALL            
  28.     2 qnum,
  29.     U.id_aviso,
  30.     U.telefonos,
  31.     U.telefonos3,
  32.     U.movil,
  33.     U.dni,
  34.     U.name,
  35.     U.apellidos,
  36.     D.localidad,
  37.     D.calle
  38.     usuarios U INNER JOIN dir_usuarios D ON  U.id_aviso=D.id_aviso
  39.     D.calle != ''
  40.     AND  calle LIKE '%JOSE FAJARDO%';
La consulta en sí no contiene ningún error sintáctico, aunque tiene un problema probable: si te fijas yo puse los campos "name "de esta forma:
Código MySQL:
Ver original
  1. A.`name`,
Hice eso porque "name" es una palabra reservada de MySQL, y puede generar errores sintácticos invisibles.
De todos modos, si te fijas con cuidado, el problema estaría en la línea 103, mas o menos, del script, y justo antes de eso está:
Código PHP:
Ver original
  1. // Ejecutar la sentencia
  2.     $query = mysql_query($sql);
  3.     if (!$sql) {
  4.     die('Consulta no válida: ' . mysql_error());
  5. }
Ahora bien, si lees con cuidado verás que en lugar de verificar el resultado de la consulta ($query), estás verificando la variable de la misma ($sql), lo cual obviamente es incorrecto...

Cambia
Código PHP:
Ver original
  1. if (!$sql) {
por

Código PHP:
Ver original
  1. if (!$query) {
y vuelve a probar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #34 (permalink)  
Antiguo 25/02/2013, 17:37
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 8 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
De todos modos, si te fijas con cuidado, el problema estaría en la línea 103, mas o menos, del script, y justo antes de eso está:
Código PHP:
Ver original
  1. // Ejecutar la sentencia
  2.     $query = mysql_query($sql);
  3.     if (!$sql) {
  4.     die('Consulta no válida: ' . mysql_error());
  5. }
Ahora bien, si lees con cuidado verás que en lugar de verificar el resultado de la consulta ($query), estás verificando la variable de la misma ($sql), lo cual obviamente es incorrecto...

Cambia
Código PHP:
Ver original
  1. if (!$sql) {
por

Código PHP:
Ver original
  1. if (!$query) {
y vuelve a probar.

Lo he pueto como me has dicho y el error que me da es:
Código:
Consulta no válida: Column 'calle' in where clause is ambiguous
  #35 (permalink)  
Antiguo 25/02/2013, 17:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 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)
  #36 (permalink)  
Antiguo 26/02/2013, 03:42
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 8 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
  #37 (permalink)  
Antiguo 26/02/2013, 06:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Listar resultados de tres consultas.

Cita:
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?
No creo. Cuando usas UNION cada SELECT es una entidad independiente, pero si tienes dudas, simplemente ponle los paréntesis que eliminé y listo.
Por otro lado, me dices que no funciona, pero no me dices exactamente en qué sentido no funciona. ¿Error de MySQL? ¿Fallo de PHP? ¿Qué?
Trata de ser más especifico, "no funciona" no es información suficiente para encarar una resolución.

El tema pasa porque busco no complicar la resolución de las condiciones para el caso de "calle", poniendo dos alias diferentes, y al mismo tiempo considerando que los otros casos no se compliquen.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #38 (permalink)  
Antiguo 26/02/2013, 06:51
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 8 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No creo. Cuando usas UNION cada SELECT es una entidad independiente, pero si tienes dudas, simplemente ponle los paréntesis que eliminé y listo.
Por otro lado, me dices que no funciona, pero no me dices exactamente en qué sentido no funciona. ¿Error de MySQL? ¿Fallo de PHP? ¿Qué?
Trata de ser más especifico, "no funciona" no es información suficiente para encarar una resolución.

El tema pasa porque busco no complicar la resolución de las condiciones para el caso de "calle", poniendo dos alias diferentes, y al mismo tiempo considerando que los otros casos no se compliquen.
Gonzalo, lo que quiero decirte es que con el último código que has puesto no encuentra nigún resultado. Es decir echo [];

No es extraño que no encuentre resultados por calle y si por localidad?
  #39 (permalink)  
Antiguo 26/02/2013, 07:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Listar resultados de tres consultas.

Cita:
No es extraño que no encuentre resultados por calle y si por localidad?
¿Por qué extraño?
Si buscas una calle que en una localidad no existe, no te devolverá datos, obviamente.
Además, si la calle existe, pero el patrón buscado no coincide con ninguno, tampoco devolverá datos, y si buscas en un campo que diferencia mayusculas y munúsculas, y no respetas correctamente el contenido del patrón, tampoco devovlerá datos...
Sin ver los datos que tienes y lo que mandaste a buscar, no puedo decir de entrada si es un error de lógica o un error de datos.
Lo que sí te puedo decir es que si al probar ese script no devolvió un error de columnas ambiguas, u otro error sintáctico, entonces la consulta en sí está bien, y hay que hacer más pruebas con otros valores.
Una prueba siempre es insuficiente para definir nada.
Haz varias pruebas con valores diferentes, registra las evidencias (las muestras obtenidas de consulta y resultados, y documenta lo que logras.
En un desarrollo, documentar es crítico.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #40 (permalink)  
Antiguo 26/02/2013, 07:15
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 8 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Si te sirve de algo este código ya funciona en la búsqueda por calle tambien pero solo en mi servidor local. Al subirlo da el error, solo en búsqueda por calle:

Código:
<br /> <b>Warning</b>:  mysql_num_rows(): supplied argument is not a valid MySQL result resource in <b>C:\Inetpub\vhosts\xn--electrodiseo-khb.es\httpdocs\Wedserver\ajax.php</b> on line <b>106</b><br /> []

ajax.php

Código Javascript:
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.      // crear parametros
  18.     $condicion = "";
  19.    
  20.     if ( ! empty($vte)) {
  21.     $condicion = "telefonos='$vte'";
  22.     }
  23.     if ( ! empty($movil)) {
  24.     $condicion = "movil = '$movil'";
  25.     }
  26.     if ( ! empty($dni)) {    
  27.     $condicion = "dni = '$dni'";
  28.     }
  29.     if ( ! empty($name)) {    
  30.     $condicion = "name LIKE '%$name%'";
  31.     }
  32.     if ( ! empty($ape)) {    
  33.     $condicion = "apellidos LIKE '%$ape%'";
  34.     }
  35.     if ( ! empty($calle)) {    
  36.     $condicion = "calle LIKE '%$calle%'";
  37.     }
  38.     if ( ! empty($loca)) {    
  39.     $condicion = "localidad LIKE '%$loca%'";
  40.     }  
  41.    
  42.     // Ordenar por
  43.     $vorder = $_POST['orderby'];
  44.  
  45.     if ($vorder != '') {
  46.         $orden= " ORDER BY " . $vorder;
  47.     }
  48.  
  49.     $sql = "SELECT
  50.                0 qnum,
  51.                A.id_aviso,
  52.                A.telefonos,
  53.                A.telefonos3,
  54.                A.movil,
  55.                A.dni,
  56.                A.name,
  57.                A.apellidos,
  58.                B.localidad,
  59.                B.calle
  60.            FROM
  61.                clientes A INNER JOIN dir_clientes B  ON A.id_aviso=B.id_aviso
  62.            WHERE
  63.                B.calle != '' AND $condicion
  64.            UNION ALL
  65.            SELECT
  66.                1 qnum,
  67.                id_aviso,
  68.                telefonos,
  69.                telefonos3,
  70.                movil,
  71.                dni,
  72.                name,
  73.                apellidos,
  74.                localidad,
  75.                calle
  76.            FROM
  77.                avisos
  78.            WHERE
  79.                $condicion
  80.            UNION ALL
  81.            SELECT
  82.                2 qnum,
  83.                U.id_aviso,
  84.                U.telefonos,
  85.                U.telefonos3,
  86.                U.movil,
  87.                U.dni,
  88.                U.name,
  89.                U.apellidos,
  90.                D.localidad,
  91.                D.calle
  92.            FROM
  93.                usuarios U INNER JOIN dir_usuarios D ON  U.id_aviso=D.id_aviso
  94.            WHERE
  95.                D.calle != ''
  96.                AND  $condicion";
  97.  
  98.  
  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.     {
  112.           if($row["qnum"]==0) $style="";
  113.           if($row["qnum"]==1)$style="background-color:yellow";
  114.           if($row["qnum"]==2)$style="background-color:orange";
  115.    
  116.    
  117.    
  118.         $datos[] = array(
  119.             'id_aviso'          => $row['id_aviso'],
  120.             'telefonos'          => $row['telefonos'],
  121.             'name'      => utf8_encode($row['name']),
  122.             'apellidos'       => utf8_encode($row['apellidos']),
  123.             'calle'       => utf8_encode($row['calle']),
  124.             'localidad'        => utf8_encode($row['localidad']),
  125.             'style'       =>  $style
  126.            
  127.            
  128.         );
  129.     }
  130.     // convertimos el array de datos a formato json
  131.      echo json_encode($datos);
  132. /* Tienes resultados. */
  133.     }else{
  134. /*No tienes resultados. */
  135.     echo '[]';
  136.         }
  137.   }
  138. ?>


Un saludo
  #41 (permalink)  
Antiguo 26/02/2013, 07:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Listar resultados de tres consultas.

¿Qué versión de MySQL tienes tu en local y cuál es la que está en el servidor?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #42 (permalink)  
Antiguo 26/02/2013, 09:46
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 8 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Qué versión de MySQL tienes tu en local y cuál es la que está en el servidor?
Luego te digo la versión de Mysql. He hecho una prueba y es quitar los filtros y poner directamente un valor de calle "andalucia". Y el resultado es satisfactorio.

ajax.php

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'];
 
  
 
     
    
    
// 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  B.calle like 'andalucia'
            UNION ALL
            SELECT 
                1 qnum, 
                id_aviso, 
                telefonos, 
                telefonos3, 
                movil, 
                dni, 
                name, 
                apellidos, 
                localidad, 
                calle
            FROM 
                avisos 
            WHERE 
                calle like 'andalucia'
            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  D.calle like 'andalucia'  "
;
 
  
 
    
// 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 '[]';
        }
  }
?>
Luego son las condiciones las que tenemos mal no?
  #43 (permalink)  
Antiguo 26/02/2013, 10:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Listar resultados de tres consultas.

Cita:
Luego son las condiciones las que tenemos mal no?
No necesariamente.
Como ya te dije, sin ver exactamente datos, tablas y consulta armada... no puedo saberlo con certeza.
En principio, la diferencia de comportamiento que mencionas puede darse también por diferencias de versión de PHP (4 ó 5), de Servidor MySQL, o de estructuras de campos en las tablas.
En otras palabras: Información insuficiente para una respuesta precisa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #44 (permalink)  
Antiguo 26/02/2013, 17:00
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 8 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No necesariamente.
Como ya te dije, sin ver exactamente datos, tablas y consulta armada... no puedo saberlo con certeza.
En principio, la diferencia de comportamiento que mencionas puede darse también por diferencias de versión de PHP (4 ó 5), de Servidor MySQL, o de estructuras de campos en las tablas.
En otras palabras: Información insuficiente para una respuesta precisa.
Con tu permiso voy a dejar el código tal y como estaba que me funcionaba bien para no alargar ni entretenerte mas tiempo conmigo. Muchas gracias.

Etiquetas: mysql, resultados, select, sql, tabla, tres, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:39.