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. Hola, por favor tengo un código en el cual hago búsquedas a mi base de datos. Tiene tres consultas sql,sql1,sql2 y el problema es que ...

  #1 (permalink)  
Antiguo 20/02/2013, 18:42
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Listar resultados de tres consultas.

Hola, por favor tengo un código en el cual hago búsquedas a mi base de datos. Tiene tres consultas sql,sql1,sql2 y el problema es que si en la primera consulta sql encuentra resultados ya no me lista los resultados de las demas consultas sql1,sql2 y si que hay coincidencias en las tres. Como puedo hacer para que me liste si hay datos de las tres consultas o de dos o una sola.

Código Javascript:
Ver original
  1. <?php  
  2. include("Connections/conexion.php");
  3. if ($_GET["action"] == "listar")
  4. {
  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. if ( ! empty($vte)) {
  15.     $sql = "SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  16. FROM clientes U,dir_clientes D
  17. WHERE  U.id_aviso=D.id_aviso AND U.telefonos='$vte' AND D.calle != ''";
  18. }
  19. if ( ! empty($movil)) {
  20.     $sql = "SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  21. FROM clientes U,dir_clientes D
  22. WHERE  U.id_aviso=D.id_aviso AND U.movil='$movil' AND D.calle != ''";
  23. }
  24. if ( ! empty($calle)) {
  25.     $sql = "SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  26. FROM clientes U,dir_clientes D
  27. WHERE  U.id_aviso=D.id_aviso AND D.calle like '%$calle%' AND D.calle != ''";
  28. }
  29. if ( ! empty($loca)) {
  30.     $sql = "SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  31. FROM clientes U,dir_clientes D
  32. WHERE  U.id_aviso=D.id_aviso AND D.localidad like '%$loca%' AND D.calle != ''";
  33. }
  34.     // Ordenar por
  35.     $vorder = $_POST['orderby'];
  36.      
  37.     if($vorder != ''){
  38.         $sql .= " ORDER BY ".$vorder;
  39.     }
  40.      
  41.     $query = mysql_query($sql);
  42. if (mysql_num_rows($query) > 0) {
  43.          
  44.   $datos = array();
  45.      
  46.     while($row = mysql_fetch_array($query))
  47.     {
  48.         $datos[] = array(
  49.             'id_aviso'          => $row['id_aviso'],
  50.             'telefonos'          => $row['telefonos'],
  51.             'name'      => utf8_encode($row['name']),
  52.             'apellidos'       => utf8_encode($row['apellidos']),
  53.             'calle'       => utf8_encode($row['calle']),
  54.             'localidad'        => utf8_encode($row['localidad'])
  55.            
  56.         );
  57.     }
  58.     // convertimos el array de datos a formato json
  59.     echo json_encode($datos);
  60. /* Tienes resultados. */
  61. } else{
  62. /* No hay resultados, hacer la segunda consulta a la otra tabla. */
  63. if (mysql_num_rows($query) == 0){
  64.  
  65. if ( ! empty($vte)) {
  66. $sql1 = "SELECT telefonos,name,apellidos,id_aviso,localidad,calle FROM  avisos  WHERE telefonos='$vte'";
  67. }
  68. if ( ! empty($movil)) {
  69. $sql1 = "SELECT telefonos,name,apellidos,id_aviso,localidad,calle FROM  avisos  WHERE movil='$movil'";
  70. }
  71. if ( ! empty($name)) {
  72. $sql1 = "SELECT telefonos,name,apellidos,id_aviso,localidad,calle  FROM  avisos  WHERE name LIKE '%$name%'";
  73. }
  74. if ( ! empty($dni)) {
  75. $sql1 = "SELECT telefonos,name,apellidos,id_aviso,localidad,calle  FROM  avisos  WHERE dni LIKE '%$dni%'";
  76. }
  77. if ( ! empty($calle)) {
  78. $sql1 = "SELECT telefonos,name,apellidos,id_aviso,localidad,calle  FROM  avisos  WHERE calle LIKE '%$calle%'";
  79. }
  80. if ( ! empty($loca)) {
  81. $sql1 = "SELECT telefonos,name,apellidos,id_aviso,localidad,calle  FROM  avisos  WHERE localidad LIKE '%$loca%'";
  82. }            
  83.  
  84.     // Ordenar por
  85.     $vorder = $_POST['orderby'];
  86.      
  87.     if($vorder != ''){
  88.         $sql1 .= " ORDER BY ".$vorder;
  89.     }
  90.      
  91.     $query = mysql_query($sql1);
  92. if (mysql_num_rows($query) > 0) {
  93.          
  94.   $datos = array();
  95.      
  96.     while($row = mysql_fetch_array($query))
  97.     {
  98.         $datos[] = array(
  99.             'id_aviso'          => $row['id_aviso'],
  100.             'telefonos'          => $row['telefonos'],
  101.             'name'      => $row['name'],
  102.             'apellidos'       => $row['apellidos'],
  103.             'calle'       => utf8_encode($row['calle']),
  104.             'localidad'        => $row['localidad'],
  105.             'style'            => 'background-color:yellow;'
  106.         );
  107.     }
  108.     // convertimos el array de datos a formato json
  109.     echo json_encode($datos);
  110. /* Tienes resultados. */
  111. } else{
  112. /* No hay resultados, hacer la tercera consulta a la otra tabla. */
  113. if (mysql_num_rows($query) == 0){
  114. if ( ! empty($vte)) {
  115.     $sql2 = "SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  116. FROM usuarios U,dir_usuarios D
  117. WHERE  U.id_aviso=D.id_aviso AND U.telefonos='$vte'";
  118. }
  119. if ( ! empty($movil)) {
  120.     $sql2 = "SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  121. FROM usuarios U,dir_usuarios D
  122. WHERE  U.id_aviso=D.id_aviso AND U.movil='$movil'";
  123. }
  124. if ( ! empty($ape)) {
  125.     $sql2 = "SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  126. FROM usuarios U,dir_usuarios D  
  127. WHERE  U.id_aviso=D.id_aviso AND U.apellidos LIKE '%$ape%'";
  128. }
  129. if ( ! empty($name)) {
  130.     $sql2 = "SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  131. FROM usuarios U,dir_usuarios D  
  132. WHERE  U.id_aviso=D.id_aviso AND U.name LIKE '%$name%'";
  133. }
  134. if ( ! empty($dni)) {
  135.     $sql2 = "SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  136. FROM usuarios U,dir_usuarios D  
  137. WHERE  U.id_aviso=D.id_aviso AND U.dni LIKE '%$dni%'";
  138. }
  139. if ( ! empty($calle)) {
  140.     $sql2 = "SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  141. FROM usuarios U,dir_usuarios D  
  142. WHERE  U.id_aviso=D.id_aviso AND D.calle like '%$calle%'";
  143. }
  144. if ( ! empty($loca)) {
  145.     $sql2 = "SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  146. FROM usuarios U,dir_usuarios D  
  147. WHERE  U.id_aviso=D.id_aviso AND D.localidad like '%$loca%'";
  148. }
  149.    // Ordenar por
  150.     $vorder = $_POST['orderby'];
  151.      
  152.     if($vorder != ''){
  153.         $sql2 .= " ORDER BY ".$vorder;
  154.     }
  155.      
  156.     $query = mysql_query($sql2);
  157.     $datos = array();
  158.     while($row = mysql_fetch_array($query))
  159.    
  160.    
  161.     {
  162.         $datos[] = array(
  163.             'id_aviso'          => $row['id_aviso'],
  164.             'telefonos'          => $row['telefonos'],
  165.             'name'      => utf8_encode($row['name']),
  166.             'apellidos'       => utf8_encode($row['apellidos']),
  167.             'calle'       => utf8_encode($row['calle']),
  168.             'localidad'        => $row['localidad'],
  169.             'style'            => 'background-color:orange;'
  170.         );
  171.        }
  172.     // convertimos el array de datos a formato json
  173.     echo json_encode($datos);  
  174.   }
  175.  }
  176.     }
  177.   }
  178. }
  179. ?>


Gracias y un saludo
  #2 (permalink)  
Antiguo 20/02/2013, 18:55
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Listar resultados de tres consultas.

Que se ejecute la consulta $sql está en un if:
Código HTML:
Ver original
  1. if ($_GET["action"] == "listar")
  2. {
  3.   /* .... creacion de $sql, datos, json */
  4. }
  5. else
  6. {
  7.     if (mysql_num_rows($query) == 0){ /* $query no estará ni definido..*/
  8.      ...
  9.     }
  10. }

Aparte...En vez de hacer un código tan copypasteado..
Código PHP:
Ver original
  1. $vars=array("vte"=>"U.telefonos",
  2.                        "movil"=>"U.movil",
  3.                        "calle"=>"D.calle",
  4.                        "loca"=>"D.localidad"
  5.                       );
  6.    foreach($vars as $key=>$value)
  7.    {
  8.           if(isset($$key))
  9.             $filters[]=$value." like '%".($$key)."%'";          
  10.    }
  11.    $sql = "SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  12. FROM clientes U,dir_clientes D
  13. WHERE  U.id_aviso=D.id_aviso AND D.calle != '' AND ".implode(" AND ",$filters);
  #3 (permalink)  
Antiguo 21/02/2013, 02:26
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por dashtrash Ver Mensaje
Que se ejecute la consulta $sql está en un if:
Código HTML:
Ver original
  1. if ($_GET["action"] == "listar")
  2. {
  3.   /* .... creacion de $sql, datos, json */
  4. }
  5. else
  6. {
  7.     if (mysql_num_rows($query) == 0){ /* $query no estará ni definido..*/
  8.      ...
  9.     }
  10. }

Aparte...En vez de hacer un código tan copypasteado..
Código PHP:
Ver original
  1. $vars=array("vte"=>"U.telefonos",
  2.                        "movil"=>"U.movil",
  3.                        "calle"=>"D.calle",
  4.                        "loca"=>"D.localidad"
  5.                       );
  6.    foreach($vars as $key=>$value)
  7.    {
  8.           if(isset($$key))
  9.             $filters[]=$value." like '%".($$key)."%'";          
  10.    }
  11.    $sql = "SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  12. FROM clientes U,dir_clientes D
  13. WHERE  U.id_aviso=D.id_aviso AND D.calle != '' AND ".implode(" AND ",$filters);
Hola, gracias por contestar. @dashtrash te refieres a juntar las tres sql en una?
  #4 (permalink)  
Antiguo 21/02/2013, 05:26
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Listar resultados de tres consultas.

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.
  #5 (permalink)  
Antiguo 21/02/2013, 08:33
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por dashtrash Ver Mensaje
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
  1. <?php  
  2. include("Connections/conexion.php");
  3. if ($_GET["action"] == "listar")
  4. {
  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. $vars=array("vte"=>"U.telefonos",
  15.                        "movil"=>"U.movil",
  16.                        "calle"=>"D.calle",
  17.                        "loca"=>"D.localidad"
  18.                       );
  19.    foreach($vars as $key=>$value)
  20.    {
  21.           if(isset($$key))
  22.             $filters[]=$value." like '%".($$key)."%'";          
  23.    }   
  24. $sql = "(SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  25. FROM clientes U,dir_clientes D
  26. WHERE  U.id_aviso=D.id_aviso AND D.calle != '' AND ".implode(" AND ",$filters).";)
  27. UNION ALL
  28. (SELECT id_aviso,telefonos,name,apellidos,localidad,calle FROM  avisos  WHERE ".implode(" AND ",$filters).";)
  29. UNION ALL
  30. (SELECT U.id_aviso,U.telefonos,U.name,U.apellidos,D.localidad,D.calle
  31. FROM usuarios U,dir_usuarios D
  32. WHERE  U.id_aviso=D.id_aviso AND D.calle != '' AND ".implode(" AND ",$filters).";)";
  33.  
  34.  
  35.     // Ordenar por
  36.     $vorder = $_POST['orderby'];
  37.      
  38.     if($vorder != ''){
  39.         $sql .= " ORDER BY ".$vorder;
  40.     }
  41.      
  42.     $query = mysql_query($sql);
  43. if (mysql_num_rows($query) > 0) {
  44.          
  45.   $datos = array();
  46.      
  47.     while($row = mysql_fetch_array($query))
  48.     {
  49.         $datos[] = array(
  50.             'id_aviso'          => $row['id_aviso'],
  51.             'telefonos'          => $row['telefonos'],
  52.             'name'      => utf8_encode($row['name']),
  53.             'apellidos'       => utf8_encode($row['apellidos']),
  54.             'calle'       => utf8_encode($row['calle']),
  55.             'localidad'        => utf8_encode($row['localidad'])
  56.            
  57.         );
  58.     }
  59.     // convertimos el array de datos a formato json
  60.     echo json_encode($datos);
  61. /* Tienes resultados. */
  62.  }
  63. }
  64. ?>
  #6 (permalink)  
Antiguo 21/02/2013, 09:04
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Listar resultados de tres consultas.

No puedes usar UNION ALL.Son 3 queries, no una.No puedes usar UNION ALL ya que cada query retorna un conjunto de columnas diferente.Para usar UNION ALL , cada query tiene que retornar las mismas columnas, en el mismo orden.
  #7 (permalink)  
Antiguo 21/02/2013, 09:57
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por dashtrash Ver Mensaje
No puedes usar UNION ALL.Son 3 queries, no una.No puedes usar UNION ALL ya que cada query retorna un conjunto de columnas diferente.Para usar UNION ALL , cada query tiene que retornar las mismas columnas, en el mismo orden.
Si que puedo, te muestro como lo hago con solo un filtro:

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'];
    
$sql ="(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  U.telefonos='$vte')
 
UNION ALL
 
(SELECT telefonos,telefonos3,movil,dni,name,apellidos,localidad,calle
 
FROM avisos WHERE telefonos='$vte' )
 
UNION ALL
 
(SELECT A.id_aviso,A.telefonos,A.name,A.apellidos,B.localidad,B.calle
 
FROM clientes A,dir_clientes B WHERE A.id_aviso=B.id_aviso AND B.calle != '' AND  A.telefonos='$vte')"
;
    
    
    

    
// 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. */ 
  

}
?>
  #8 (permalink)  
Antiguo 21/02/2013, 11:03
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Listar resultados de tres consultas.

Bueno..si "si que puedes" (que no puedes)..cual es el problema?
  #9 (permalink)  
Antiguo 21/02/2013, 11:15
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por dashtrash Ver Mensaje
Bueno..si "si que puedes" (que no puedes)..cual es el problema?
Pues seguir metiendo filtros por calle,apellidos etc...y luego como puedo saber en cual de las tres consultas a encontrado datos? Es decir cuando liste los datos saber de que SELECT han salido. Si te fijas en el mi primer post tenía en cada array una variable llamada style a la cual le doy un estilo.
Gracias
  #10 (permalink)  
Antiguo 21/02/2013, 11:19
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Listar resultados de tres consultas.

En caso de que funcionara, (que, te repito, no va a funcionar..Hay una query que retorna un numero de columnas distinta a las otras dos), diferenciar qué query es la que ha devuelto un resultado es tan simple como hacer que cada una devuelva una constante distinta:
SELECT 0 as qnum, ...... UNION ALL
SELECT 1 as qnum .... UNION ALL
SELECT 2 as qnum
Lo de seguir metiendo filtros....pues como has metido los anteriores..No entiendo cuál es el problema..
  #11 (permalink)  
Antiguo 21/02/2013, 12:44
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por dashtrash Ver Mensaje
En caso de que funcionara, (que, te repito, no va a funcionar..Hay una query que retorna un numero de columnas distinta a las otras dos), diferenciar qué query es la que ha devuelto un resultado es tan simple como hacer que cada una devuelva una constante distinta:
SELECT 0 as qnum, ...... UNION ALL
SELECT 1 as qnum .... UNION ALL
SELECT 2 as qnum
Lo de seguir metiendo filtros....pues como has metido los anteriores..No entiendo cuál es el problema..
Perdona, pero no te entiendo con lo de SELECT 0 as qnum, ...... UNION ALL como veras yo lo hacía con 'style' => 'background-color:yellow;' y luego en la impresión me salian las filas del color dependiendo del SELECT que fuese, y lo de los filtros es que no se como meter mas en los SELECT.

Última edición por satjaen; 21/02/2013 a las 12:50
  #12 (permalink)  
Antiguo 21/02/2013, 15:14
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

He arreglado el código y ya tienen las UNIONES las mismas columnas y he hecho otro filtro tambien por calle pero no se si esta bien o se puede reducir todo el código.
Si esta bien solo me queda distiguir los SELECT por medio de 'style' => 'background-color:yellow;' como ya he comentado en el post anterior.

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'];
    
if ( ! empty(
$vte)) { 
$sql ="(SELECT U.id_aviso,U.telefonos,U.telefonos3,U.movil,U.dni,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  U.telefonos='$vte')
 
UNION ALL
 
(SELECT id_aviso,telefonos,telefonos3,movil,dni,name,apellidos,localidad,calle
 
FROM avisos WHERE telefonos='$vte' )
 
UNION ALL
 
(SELECT A.id_aviso,A.telefonos,A.telefonos3,A.movil,A.dni,A.name,A.apellidos,B.localidad,B.calle
 
FROM clientes A,dir_clientes B WHERE A.id_aviso=B.id_aviso AND B.calle != '' AND  A.telefonos='$vte')"
;
}

if ( ! empty(
$calle)) { 
$sql ="(SELECT U.id_aviso,U.telefonos,U.telefonos3,U.movil,U.dni,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  D.calle like '%$calle%')
 
UNION ALL
 
(SELECT id_aviso,telefonos,telefonos3,movil,dni,name,apellidos,localidad,calle
 
FROM avisos WHERE calle like '%$calle%')
 
UNION ALL
 
(SELECT A.id_aviso,A.telefonos,A.telefonos3,A.movil,A.dni,A.name,A.apellidos,B.localidad,B.calle
 
FROM clientes A,dir_clientes B WHERE A.id_aviso=B.id_aviso AND B.calle != '' AND  B.calle like '%$calle%')"
;
}


    
// 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. */ 
  

}
?>
  #13 (permalink)  
Antiguo 21/02/2013, 15:23
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Listar resultados de tres consultas.

...Y como ya se te ha contestado...Lo que pasa, es que mientras digas cosas como:
Cita:
me queda distiguir los SELECT por medio de 'style' => 'background-color:yellow;'
...distinguir SELECTS (sql) por medio de "style" (atributo html) => (sintaxis PHP) 'background-color:yellow' (CSS)...
O, lo que es lo mismo..esa frase no tiene sentido...
Lo que puede tener sentido es saber si una fila procede del primer select de la union, del segundo select de la union, o del tercer select de la union.
Y para eso, se mete un campo con un valor constante.Cero para el primer select.Uno para el segundo.2 para el tercero.
Después, cuando lees esa fila en PHP, si en ese campo fijo hay un cero, entonces procede de la primera query, por lo que pones 'style' a lo que sea.Si hay un uno, es que procede de la segunda, y lo pones a otra cosa, etc,etc..
Se entiende ahora?
  #14 (permalink)  
Antiguo 21/02/2013, 15:35
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por dashtrash Ver Mensaje
Después, cuando lees esa fila en PHP, si en ese campo fijo hay un cero, entonces procede de la primera query, por lo que pones 'style' a lo que sea.Si hay un uno, es que procede de la segunda, y lo pones a otra cosa, etc,etc..
Se entiende ahora?
dashtrash, perdona pero tengo muy pocos conocimientos de php y entiendo lo de SELECT 0 as style, etc... pero lo demas

Gracias
  #15 (permalink)  
Antiguo 21/02/2013, 15:56
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Listar resultados de tres consultas.

En el primer SELECT, sustituye "SELECT" por "SELECT 0 as qnum".
En el segundo SELECT, sustituye "SELECT" por "SELECT 1 as qnum".
En el tercer SELECT, sustituye "SELECT" por "SELECT 2 as qnum".

Código PHP:
Ver original
  1. while($row = mysql_fetch_array($query))
  2.     {
  3.           if($row["qnum"]==0) $style="";
  4.           if($row["qnum"]==1)$style="background-color:yellow";
  5.           if($row["qnum"]==2)$style="background-color:orange";
  6.            
  7.         $datos[] = array(
  8.             'id_aviso'          => $row['id_aviso'],
  9.             'telefonos'          => $row['telefonos'],
  10.             'name'      => $row['name'],
  11.             'apellidos'       => $row['apellidos'],
  12.             'calle'       => utf8_encode($row['calle']),
  13.             'localidad'        => $row['localidad'],
  14.             'style'            => $style
  15.         );
  16.     }

Esto, sin embargo, no son dudas de PHP.Creo que, si estás haciendo algo con programación, debes aprender a programar, y específicamente con PHP.
Ir parcheando poco a poco un trozo de código, no tiene mucho sentido.
  #16 (permalink)  
Antiguo 21/02/2013, 16:09
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por dashtrash Ver Mensaje
Esto, sin embargo, no son dudas de PHP.Creo que, si estás haciendo algo con programación, debes aprender a programar, y específicamente con PHP.
Ir parcheando poco a poco un trozo de código, no tiene mucho sentido.
Muchas gracias, dashtrash. No solo hago copy-paste, intento aprender sobre la marcha. Espero aprender poco a poco.
  #17 (permalink)  
Antiguo 25/02/2013, 09: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, 4 meses
Puntos: 2658
Respuesta: Listar resultados de tres consultas.

@satjaen: Como te comenté en el Foro de MySQL, para mi te estás complicando innecesariamente.
Por un lado, todas las consultas tienen esta estructura en común (limpié un poco de basura):
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 != '' AND $condicion
  13.     1 qnum,
  14.     id_aviso,
  15.     telefonos,
  16.     telefonos3,
  17.     movil,
  18.     dni,
  19.     `name`,
  20.     apellidos,
  21.     localidad,
  22.     calle
  23.     avisos
  24.     $condicion
  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
  35.     usuarios U INNER JOIN dir_usuarios D ON  U.id_aviso=D.id_aviso
  36.     D.calle != ''
  37.     AND  $condicion;

Por otro lado, $condicion en tu ejemplo, puede tener estas formas:
Cita:
telefonos = '$vte'
movil = '$movil'
dni = '$dni'
calle LIKE '%$calle%'
apellidos LIKE '%$ape%'
`name` LIKE '%$name%'
localidad LIKE '%$loca%'
En ese contexto, entonces, lo que deberías hacer es por un lado crear la variable que cargue la condición, y por otro crear la consulta.
Tal vez algo así (no soy muy experto en PHP, por lo que deberás perdonar si hay errores):
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.     $sql = "SELECT
  14.                0 qnum,
  15.                A.id_aviso,
  16.                A.telefonos,
  17.                A.telefonos3,
  18.                A.movil,
  19.                A.dni,
  20.                A.`name`,
  21.                A.apellidos,
  22.                B.localidad,
  23.                B.calle
  24.            FROM
  25.                clientes A INNER JOIN dir_clientes B  ON A.id_aviso=B.id_aviso
  26.            WHERE
  27.                B.calle != '' AND $condicion
  28.            UNION ALL
  29.            SELECT
  30.                1 qnum,
  31.                id_aviso,
  32.                telefonos,
  33.                telefonos3,
  34.                movil,
  35.                dni,
  36.                `name`,
  37.                apellidos,
  38.                localidad,
  39.                calle
  40.            FROM
  41.                avisos
  42.            WHERE
  43.                $condicion
  44.            UNION ALL
  45.            SELECT
  46.                2 qnum,
  47.                U.id_aviso,
  48.                U.telefonos,
  49.                U.telefonos3,
  50.                U.movil,
  51.                U.dni,
  52.                U.`name`,
  53.                U.apellidos,
  54.                D.localidad,
  55.                D.calle
  56.            FROM
  57.                usuarios U INNER JOIN dir_usuarios D ON  U.id_aviso=D.id_aviso
  58.            WHERE
  59.                D.calle != ''
  60.                AND  $condicion
  61.             $orden;";
  62.     $condicion = "";
  63.     $orden = "";
  64.    
  65.     if (!empty($vte)) {$condicion = "telefonos='$vte')";}
  66.     if(empty ($condicion))
  67.         {$condicion = "movil = '$movil'";}
  68.         else {$condicion .= "AND movil = '$movil'";}
  69.     if(empty ($condicion))
  70.         {$condicion = "calle dni = '$dni'";}
  71.         else {$condicion .= "AND dni = '$dni'";}
  72.     if(empty ($condicion))
  73.         {$condicion = "calle like '%$calle%'";}
  74.         else {$condicion .= "AND calle LIKE '%$calle%'";}
  75.     if(empty ($condicion))
  76.         {$condicion = " apellidos  LIKE '%$ape%'";}
  77.         else {$condicion .= "AND apellidos  LIKE '%$ape%'";}
  78.     if(empty ($condicion))
  79.         {$condicion = "`name` LIKE '%$name%'";}
  80.         else {$condicion .= "AND `name` LIKE '%$name%'";}
  81.     if(empty ($condicion))
  82.         {$condicion = "localidad LIKE '%$loca%'";}
  83.         else {$condicion .= "AND localidad LIKE '%$loca%'";}
  84.    
  85.     // Ordenar por
  86.     $vorder = $_POST['orderby'];
  87.  
  88.     if ($vorder != '') {
  89.         $orden= " ORDER BY " . $vorder;
  90.     }
  91.  
  92.     $query = mysql_query($sql);
  93.     if (mysql_num_rows($query) > 0) {
  94.  
  95.         $datos = array();
  96.  
  97.         while ($row = mysql_fetch_array($query)) {
  98.             $datos[] = array(
  99.                 'id_aviso' => $row['id_aviso'],
  100.                 'telefonos' => $row['telefonos'],
  101.                 'name' => utf8_encode($row['name']),
  102.                 'apellidos' => utf8_encode($row['apellidos']),
  103.                 'calle' => utf8_encode($row['calle']),
  104.                 'localidad' => utf8_encode($row['localidad'])
  105.             );
  106.         }
  107.         // convertimos el array de datos a formato json
  108.         echo json_encode($datos);
  109.         /* Tienes resultados. */
  110.     }
  111. }
  112. ?>
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 25/02/2013, 14:05
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Gonzalo, me parece que debe de haber algo que no esta bien porque la consulta sql no me encuentra los datos. Te lo pongo con algunas modificaciones que ya había hecho antes.

Este es el código que has modificado:

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'];
    
$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
             $orden;"
;
    
$condicion "";
    
$orden "";
    
    if (!empty(
$vte)) {$condicion "telefonos='$vte')";}
    if(empty (
$condicion))
        {
$condicion "movil = '$movil'";}
        else {
$condicion .= "AND movil = '$movil'";}
    if(empty (
$condicion))
        {
$condicion "calle dni = '$dni'";}
        else {
$condicion .= "AND dni = '$dni'";}
    if(empty (
$condicion))
        {
$condicion "calle like '%$calle%'";}
        else {
$condicion .= "AND calle LIKE '%$calle%'";}
    if(empty (
$condicion))
        {
$condicion " apellidos  LIKE '%$ape%'";}
        else {
$condicion .= "AND apellidos  LIKE '%$ape%'";}
    if(empty (
$condicion))
        {
$condicion "`name` LIKE '%$name%'";}
        else {
$condicion .= "AND `name` LIKE '%$name%'";}
    if(empty (
$condicion))
        {
$condicion "localidad LIKE '%$loca%'";}
        else {
$condicion .= "AND localidad LIKE '%$loca%'";}
        
        
   
// Ordenar por 
    
$vorder $_POST['orderby']; 
    
    if(
$vorder != ''){ 
        
$sql .= " ORDER BY ".$vorder
    } 
     
    
$query mysql_query($sql);
    if (!
$sql) {
    die(
'Consulta no válida: ' mysql_error());
}
    if (
mysql_num_rows($query)>) {

         
  
$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 '[]'
        }
  }
?>
Y este otro el que yo tenía antes con muchas sqls:

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'];
    
if ( ! empty(
$vte)) { 
$sql ="(SELECT 0 as qnum,A.id_aviso,A.telefonos,A.telefonos3,A.movil,A.dni,A.name,A.apellidos,B.localidad,B.calle
 
FROM clientes A,dir_clientes B WHERE A.id_aviso=B.id_aviso AND B.calle != '' AND  A.telefonos='$vte')
 
UNION ALL
 
(SELECT 1 as qnum,id_aviso,telefonos,telefonos3,movil,dni,name,apellidos,localidad,calle
 
FROM avisos WHERE telefonos='$vte' )
 
UNION ALL
 
(SELECT 2 as qnum,U.id_aviso,U.telefonos,U.telefonos3,U.movil,U.dni,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  U.telefonos='$vte')"
;
}
if ( ! empty(
$movil)) { 
$sql ="(SELECT 0 as qnum,A.id_aviso,A.telefonos,A.telefonos3,A.movil,A.dni,A.name,A.apellidos,B.localidad,B.calle
 
FROM clientes A,dir_clientes B WHERE A.id_aviso=B.id_aviso AND B.calle != '' AND  A.movil='$movil')
 
UNION ALL
 
(SELECT 1 as qnum,id_aviso,telefonos,telefonos3,movil,dni,name,apellidos,localidad,calle
 
FROM avisos WHERE movil='$movil' )
 
UNION ALL
 
(SELECT 2 as qnum,U.id_aviso,U.telefonos,U.telefonos3,U.movil,U.dni,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  U.movil='$movil')"
;
}
if ( ! empty(
$dni)) { 
$sql ="(SELECT 0 as qnum,A.id_aviso,A.telefonos,A.telefonos3,A.movil,A.dni,A.name,A.apellidos,B.localidad,B.calle
 
FROM clientes A,dir_clientes B WHERE A.id_aviso=B.id_aviso AND B.calle != '' AND  A.dni='$dni')
 
UNION ALL
 
(SELECT 1 as qnum,id_aviso,telefonos,telefonos3,movil,dni,name,apellidos,localidad,calle
 
FROM avisos WHERE dni='$dni' )
 
UNION ALL
 
(SELECT 2 as qnum,U.id_aviso,U.telefonos,U.telefonos3,U.movil,U.dni,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  U.dni='$dni')"
;
}
if ( ! empty(
$calle)) { 
$sql ="(SELECT 0 as qnum,A.id_aviso,A.telefonos,A.telefonos3,A.movil,A.dni,A.name,A.apellidos,B.localidad,B.calle
 
FROM clientes A,dir_clientes B WHERE A.id_aviso=B.id_aviso AND B.calle != '' AND  B.calle like '%$calle%')

UNION ALL
 
(SELECT 1 as qnum,id_aviso,telefonos,telefonos3,movil,dni,name,apellidos,localidad,calle
 
FROM avisos WHERE calle like '%$calle%')
 
UNION ALL

(SELECT 2 as qnum, U.id_aviso,U.telefonos,U.telefonos3,U.movil,U.dni,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  D.calle like '%$calle%')"
;
}

if ( ! empty(
$ape)) { 
$sql ="(SELECT 0 as qnum,A.id_aviso,A.telefonos,A.telefonos3,A.movil,A.dni,A.name,A.apellidos,B.localidad,B.calle
 
FROM clientes A,dir_clientes B WHERE A.id_aviso=B.id_aviso AND B.calle != '' AND  A.apellidos like '%$ape%')

UNION ALL
 
(SELECT 1 as qnum,id_aviso,telefonos,telefonos3,movil,dni,name,apellidos,localidad,calle
 
FROM avisos WHERE apellidos like '%$ape%')
 
UNION ALL

(SELECT 2 as qnum, U.id_aviso,U.telefonos,U.telefonos3,U.movil,U.dni,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  U.apellidos like '%$ape%')"
;
}
if ( ! empty(
$name)) { 
$sql ="(SELECT 0 as qnum,A.id_aviso,A.telefonos,A.telefonos3,A.movil,A.dni,A.name,A.apellidos,B.localidad,B.calle
 
FROM clientes A,dir_clientes B WHERE A.id_aviso=B.id_aviso AND B.calle != '' AND  A.name like '%$name%')

UNION ALL
 
(SELECT 1 as qnum,id_aviso,telefonos,telefonos3,movil,dni,name,apellidos,localidad,calle
 
FROM avisos WHERE name like '%$name%')
 
UNION ALL

(SELECT 2 as qnum, U.id_aviso,U.telefonos,U.telefonos3,U.movil,U.dni,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  U.name like '%$name%')"
;
}
if ( ! empty(
$loca)) { 
$sql ="(SELECT 0 as qnum,A.id_aviso,A.telefonos,A.telefonos3,A.movil,A.dni,A.name,A.apellidos,B.localidad,B.calle
 
FROM clientes A,dir_clientes B WHERE A.id_aviso=B.id_aviso AND B.calle != '' AND  B.localidad like '%$loca%')

UNION ALL
 
(SELECT 1 as qnum,id_aviso,telefonos,telefonos3,movil,dni,name,apellidos,localidad,calle
 
FROM avisos WHERE localidad like '%$loca%')
 
UNION ALL

(SELECT 2 as qnum, U.id_aviso,U.telefonos,U.telefonos3,U.movil,U.dni,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  D.localidad like '%$loca%')"
;
}



    
// Ordenar por 
    
$vorder $_POST['orderby']; 
    
    if(
$vorder != ''){ 
        
$sql .= " ORDER BY ".$vorder
    } 
     
    
$query mysql_query($sql);
    if (!
$sql) {
    die(
'Consulta no válida: ' mysql_error());
}
    if (
mysql_num_rows($query)>) {

         
  
$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 '[]'
        }
  }
?>
Gracias.
  #19 (permalink)  
Antiguo 25/02/2013, 14:17
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, 4 meses
Puntos: 2658
Respuesta: Listar resultados de tres consultas.

Por empezar, ¿capturaste la consulta creada en la variable? ¿La probaste directamente en MySQL?
¿Verificaste la lógica del script? Te dije que no soy muy experto, pero luego de todo, me di cuenta que había al menos un error...
Aprovechemos y verifiquemos la consulta creada al final, antes de enviarla a ejecución:
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.     // crear parametros
  15.     $condicion = "";
  16.     $orden = "";
  17.    
  18.     if (!empty($vte)) {$condicion = "telefonos='$vte')";}
  19.     if(empty ($condicion))
  20.         {$condicion = "movil = '$movil'";}
  21.         else {$condicion .= "AND movil = '$movil'";}
  22.     if(empty ($condicion))
  23.         {$condicion = "calle dni = '$dni'";}
  24.         else {$condicion .= "AND dni = '$dni'";}
  25.     if(empty ($condicion))
  26.         {$condicion = "calle like '%$calle%'";}
  27.         else {$condicion .= "AND calle LIKE '%$calle%'";}
  28.     if(empty ($condicion))
  29.         {$condicion = " apellidos  LIKE '%$ape%'";}
  30.         else {$condicion .= "AND apellidos  LIKE '%$ape%'";}
  31.     if(empty ($condicion))
  32.         {$condicion = "`name` LIKE '%$name%'";}
  33.         else {$condicion .= "AND `name` LIKE '%$name%'";}
  34.     if(empty ($condicion))
  35.         {$condicion = "localidad LIKE '%$loca%'";}
  36.         else {$condicion .= "AND localidad LIKE '%$loca%'";}
  37.        
  38.        
  39.    // Ordenar por
  40.     $vorder = $_POST['orderby'];
  41.    
  42.     if($vorder != ''){
  43.         $sql .= " ORDER BY ".$vorder;
  44.     }
  45.      // crear sentencia
  46.     $sql = "SELECT
  47.                0 qnum,
  48.                A.id_aviso,
  49.                A.telefonos,
  50.                A.telefonos3,
  51.                A.movil,
  52.                A.dni,
  53.                A.`name`,
  54.                A.apellidos,
  55.                B.localidad,
  56.                B.calle
  57.            FROM
  58.                clientes A INNER JOIN dir_clientes B  ON A.id_aviso=B.id_aviso
  59.            WHERE
  60.                B.calle != '' AND $condicion
  61.            UNION ALL
  62.            SELECT
  63.                1 qnum,
  64.                id_aviso,
  65.                telefonos,
  66.                telefonos3,
  67.                movil,
  68.                dni,
  69.                `name`,
  70.                apellidos,
  71.                localidad,
  72.                calle
  73.            FROM
  74.                avisos
  75.            WHERE
  76.                $condicion
  77.            UNION ALL
  78.            SELECT
  79.                2 qnum,
  80.                U.id_aviso,
  81.                U.telefonos,
  82.                U.telefonos3,
  83.                U.movil,
  84.                U.dni,
  85.                U.`name`,
  86.                U.apellidos,
  87.                D.localidad,
  88.                D.calle
  89.            FROM
  90.                usuarios U INNER JOIN dir_usuarios D ON  U.id_aviso=D.id_aviso
  91.            WHERE
  92.                D.calle != ''
  93.                AND  $condicion
  94.             $orden;";
  95.  
  96.     // Verificar la sentencia
  97.     echo $sql;
  98.  
  99.     // Ejecutar la sentencia
  100.     $query = mysql_query($sql);
  101.     if (!$sql) {
  102.     die('Consulta no válida: ' . mysql_error());
  103. }
  104.     if (mysql_num_rows($query)>0 ) {
  105.  
  106.          
  107.   $datos = array();
  108.      
  109.     while($row = mysql_fetch_array($query))
  110.     {
  111.           if($row["qnum"]==0) $style="";
  112.           if($row["qnum"]==1)$style="background-color:yellow";
  113.           if($row["qnum"]==2)$style="background-color:orange";
  114.    
  115.    
  116.    
  117.         $datos[] = array(
  118.             'id_aviso'          => $row['id_aviso'],
  119.             'telefonos'          => $row['telefonos'],
  120.             'name'      => utf8_encode($row['name']),
  121.             'apellidos'       => utf8_encode($row['apellidos']),
  122.             'calle'       => utf8_encode($row['calle']),
  123.             'localidad'        => utf8_encode($row['localidad']),
  124.             'style'       =>  $style
  125.            
  126.            
  127.         );
  128.     }
  129.     // convertimos el array de datos a formato json
  130.     echo json_encode($datos);
  131. /* Tienes resultados. */
  132.     }else{
  133. /*No tienes resultados. */
  134.     echo '[]';
  135.         }
  136.   }
  137. ?>
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #20 (permalink)  
Antiguo 25/02/2013, 14:37
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Gonzalo, la variable $orden = ""; para que sirve?
  #21 (permalink)  
Antiguo 25/02/2013, 14:38
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, 4 meses
Puntos: 2658
Respuesta: Listar resultados de tres consultas.

Inicializacion...
Es un hábito de desarrollador. Siempre lo pongo.
En tu caso esa es la que contendría lo que se indique para el ordenamiento. ¿No es así?
Llegado el caso que quede vacía, simplemente no contendrá nada.

Como te aclaré, debe forzosamente haber algunos errores, porque no tengo los elementos para probarlo todo. La base la tienes tu, por lo que sólo estoy trabajando a nivel de script.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #22 (permalink)  
Antiguo 25/02/2013, 14:41
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Inicializacion...
Es un hábito de desarrollador. Siempre lo pongo.
En tu caso esa es la que contendría lo que se indique para el ordenamiento. ¿No es así?
Llegado el caso que quede vacía, simplemente no contendrá nada.
No, en la consulta no ordeno los registros. En Mysql me saca todos los resultados que tengo en la base de datos.
  #23 (permalink)  
Antiguo 25/02/2013, 14:46
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, 4 meses
Puntos: 2658
Respuesta: Listar resultados de tres consultas.

¿Entonces por qué pusiste esto en tu primer script, en el primer mensaje (lineas 34 y siguientes):
Código PHP:
Ver original
  1. // Ordenar por
  2.     $vorder = $_POST['orderby'];
  3.      
  4.     if($vorder != ''){
  5.         $sql .= " ORDER BY ".$vorder;
  6.     }

Allí le estabas agregando a cada una de las versiones de la consulta, un ORDER BY que afectaba a todo...

¿Hiciste un Copy+Paste de un script ajeno, sin analizarlo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #24 (permalink)  
Antiguo 25/02/2013, 14:59
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Entonces por qué pusiste esto en tu primer script, en el primer mensaje (lineas 34 y siguientes):
Código PHP:
Ver original
  1. // Ordenar por
  2.     $vorder = $_POST['orderby'];
  3.      
  4.     if($vorder != ''){
  5.         $sql .= " ORDER BY ".$vorder;
  6.     }

Allí le estabas agregando a cada una de las versiones de la consulta, un ORDER BY que afectaba a todo...

¿Hiciste un Copy+Paste de un script ajeno, sin analizarlo?
No, no he copiado de nadie. Lo que pasa es que la variable $vorder como veras en la consulta de muchas sqls no la tengo. Y sin embargo si ordena los datos en el código que tengo en javascript:
Código Javascript:
Ver original
  1. // ordenar por
  2.     $("#data th span").click(function(){
  3.         var orden = '';
  4.         if($(this).hasClass("desc"))
  5.         {
  6.             $("#data th span").removeClass("desc").removeClass("asc")
  7.             $(this).addClass("asc");
  8.             ordenar = "&orderby="+$(this).attr("title")+" asc"        
  9.         }else
  10.         {
  11.             $("#data th span").removeClass("desc").removeClass("asc")
  12.             $(this).addClass("desc");
  13.             ordenar = "&orderby="+$(this).attr("title")+" desc"
  14.         }
  15.         filtrar()
  16.     });
  17. });
La verdad es que no me había dado cuenta de eso. Como es posible que ordene los datos sin meter esa variable en la consulta sql?
  #25 (permalink)  
Antiguo 25/02/2013, 15:02
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, 4 meses
Puntos: 2658
Respuesta: Listar resultados de tres consultas.

Cita:
Como es posible que ordene los datos sin meter esa variable en la consulta sql?
Porque por default MySQL ordena según el valor de las columnas de izquierda a derecha, y en este caso además, los UNION ALL segmentan el ordenamiento entre si (cada consulta separadamente como subconjunto), mientras que el ORDER BY final ordenaría todo el resultado como un único conjunto.
Creo que te vendría bien profundizar sobre el SQL...

Por cierto, ¿capturaste al final el echo de la consulta?
¿Puedes mostrárnoslo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #26 (permalink)  
Antiguo 25/02/2013, 15:06
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Porque por default MySQL ordena según el valor de las columnas de izquierda a derecha, y en este caso además, los UNION ALL segmentan el ordenamiento entre si (cada consulta separadamente como subconjunto), mientras que el ORDER BY final ordenaría todo el resultado como un único conjunto.
Creo que te vendría bien profundizar sobre el SQL...

Por cierto, ¿capturaste al final el echo de la consulta?
¿Puedes mostrárnoslo?
Estoy probando, ahora te cuento.
  #27 (permalink)  
Antiguo 25/02/2013, 15:18
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

La consulta está perfecta:

Código MySQL:
Ver original
  1. $sql = "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
  12.            FROM
  13.                clientes A INNER JOIN dir_clientes B  ON A.id_aviso=B.id_aviso
  14.            WHERE
  15.                B.calle != '' AND $condicion
  16.            UNION ALL
  17.            SELECT
  18.                1 qnum,
  19.                id_aviso,
  20.                telefonos,
  21.                telefonos3,
  22.                movil,
  23.                dni,
  24.                name,
  25.                apellidos,
  26.                localidad,
  27.                calle
  28.            FROM
  29.                avisos
  30.            WHERE
  31.                $condicion
  32.            UNION ALL
  33.            SELECT
  34.                2 qnum,
  35.                U.id_aviso,
  36.                U.telefonos,
  37.                U.telefonos3,
  38.                U.movil,
  39.                U.dni,
  40.                U.name,
  41.                U.apellidos,
  42.                D.localidad,
  43.                D.calle
  44.            FROM
  45.                usuarios U INNER JOIN dir_usuarios D ON  U.id_aviso=D.id_aviso
  46.            WHERE
  47.                D.calle != ''
  48.                AND  $condicion";


El problema está en las condiciones:

Código PHP:
 // crear parametros
    
$condicion "";
    
    if (!empty(
$vte)) {$condicion "telefonos='$vte')";}
    if(empty (
$condicion))
        {
$condicion "movil = '$movil'";}
        else {
$condicion .= "AND movil = '$movil'";}
    if(empty (
$condicion))
        {
$condicion "calle dni = '$dni'";}
        else {
$condicion .= "AND dni = '$dni'";}
    if(empty (
$condicion))
        {
$condicion "calle like '%$calle%'";}
        else {
$condicion .= "AND calle LIKE '%$calle%'";}
    if(empty (
$condicion))
        {
$condicion " apellidos  LIKE '%$ape%'";}
        else {
$condicion .= "AND apellidos  LIKE '%$ape%'";}
    if(empty (
$condicion))
        {
$condicion "name LIKE '%$name%'";}
        else {
$condicion .= "AND name LIKE '%$name%'";}
    if(empty (
$condicion))
        {
$condicion "localidad LIKE '%$loca%'";}
        else {
$condicion .= "AND localidad LIKE '%$loca%'";} 
  #28 (permalink)  
Antiguo 25/02/2013, 15:44
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Ok, las condiciones quedarían así si le dais el visto bueno.

Código PHP:
// 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%'";
    } 
Gonzalo, con solo una consulta sql supongo que deben de ir las búsquedas más rápidas no? y que diferencias más puede haber?
  #29 (permalink)  
Antiguo 25/02/2013, 16:07
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, 4 meses
Puntos: 2658
Respuesta: Listar resultados de tres consultas.

Creo que no me entendiste...
Captura la consulta en un ejemplo de ejecución (ya en funcionamiento), y postea cómo queda armada .
Lo que quiero ver es el resultado de todo esto en un caso real.
Quiero ver que la sintaxis sea correcta, y ver cómo se arma finalmente todo.

Cita:
Gonzalo, con solo una consulta sql supongo que deben de ir las búsquedas más rápidas no? y que diferencias más puede haber?
No necesariamente.
Un exceso de condiciones dinámicamente creadas puede dar como resultado una consulta de pésima performance, aunque eso tampoco es una regla absoluta.
Una de las razones por las que te pido que captures un caso de prueba y lo postees es precisamente para ver qué tan bien funcionó too, y qué cosas pueden necesitarse hacer.

Hasta ahora lo único que logramos es armar una única consulta que puede ser usada de diferentes formas, acumulativas o no, pero no sabemos si es optima, y qué tan optimizable sea.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #30 (permalink)  
Antiguo 25/02/2013, 16:12
Avatar de satjaen  
Fecha de Ingreso: septiembre-2012
Ubicación: Jaén (Andalucía)
Mensajes: 893
Antigüedad: 11 años, 7 meses
Puntos: 10
Respuesta: Listar resultados de tres consultas.

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Creo que no me entendiste...
Captura la consulta en un ejemplo de ejecución (ya en funcionamiento), y postea cómo queda armada .
Lo que quiero ver es el resultado de todo esto en un caso real.
Quiero ver que la sintaxis sea correcta, y ver cómo se arma finalmente todo.

No necesariamente.
Un exceso de condiciones dinámicamente creadas puede dar como resultado una consulta de pésima performance, aunque eso tampoco es una regla absoluta.
Una de las razones por las que te pido que captures un caso de prueba y lo postees es precisamente para ver qué tan bien funcionó too, y qué cosas pueden necesitarse hacer.

Hasta ahora lo único que logramos es armar una única consulta que puede ser usada de diferentes formas, acumulativas o no, pero no sabemos si es optima, y qué tan optimizable sea.
Explicame como se hace.

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 06:24.