Foros del Web » Programando para Internet » PHP »

Hacer consulta filtrando datos

Estas en el tema de Hacer consulta filtrando datos en el foro de PHP en Foros del Web. Hola, en el formulario que estoy haciendo tengo varios input en los que puedo buscar por varias cosas como telefono, nombre etc. El select que ...
  #1 (permalink)  
Antiguo 21/12/2012, 04:33
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
Hacer consulta filtrando datos

Hola, en el formulario que estoy haciendo tengo varios input en los que puedo buscar por varias cosas como telefono, nombre etc. El select que tengo es este:

Código MySQL:
Ver original
  1. SELECT telefono,id_aviso,nombre,apellidos,poblacion
  2. FROM  avisos_wed  
  3. WHERE nombre LIKE '%$vn%' AND telefono LIKE '%$vte%' AND apellidos LIKE '%$vnm%' ;

El problema lo tengo, en que si busco sólo por los apellidos me detecta que el campo telefono esta vacio o tiene valor 0 y me lista muchos resultados.

Un saludo

Última edición por gnzsoloyo; 21/12/2012 a las 04:48
  #2 (permalink)  
Antiguo 21/12/2012, 09:44
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: Hacer consulta filtrando datos

Perdonad, no sé si me he explicado bien?
  #3 (permalink)  
Antiguo 21/12/2012, 12:21
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Hacer consulta filtrando datos

Hola satjaen,

Yo la haría así, lo que no quiere decir que te funcione porque no tengo todos los datos, pero puedes probar:

Código MySQL:
Ver original
  1. SELECT telefono,id_aviso,nombre,apellidos,poblacion
  2.                  FROM  avisos_wed  
  3.                  WHERE 1 = 1
  4.  
  5. -- Aquí comprobaría si la variable no está vacía
  6.  
  7.                  AND nombre LIKE '%" . $vn . "%'
  8.  
  9. -- Aquí comprobaría si la variable no está vacía
  10.  
  11.                  AND telefono LIKE '%" . $vte. "%'
  12.  
  13. -- Aquí comprobaría si la variable no está vacía
  14.  
  15.                  AND apellidos LIKE '%" . $vnm. "%'

No sé si te servirá, pero te doy la idea, a ver si hay suerte...

.

Última edición por rbczgz; 21/12/2012 a las 12:50 Razón: Eliminar código PHP porque me he dado cuenta de que no está permitido...
  #4 (permalink)  
Antiguo 22/12/2012, 03:04
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: Hacer consulta filtrando datos

Cita:
Iniciado por rbczgz Ver Mensaje
Hola satjaen,

Yo la haría así, lo que no quiere decir que te funcione porque no tengo todos los datos, pero puedes probar:

Código MySQL:
Ver original
  1. SELECT telefono,id_aviso,nombre,apellidos,poblacion
  2.                  FROM  avisos_wed  
  3.                  WHERE 1 = 1
  4.  
  5. -- Aquí comprobaría si la variable no está vacía
  6.  
  7.                  AND nombre LIKE '%" . $vn . "%'
  8.  
  9. -- Aquí comprobaría si la variable no está vacía
  10.  
  11.                  AND telefono LIKE '%" . $vte. "%'
  12.  
  13. -- Aquí comprobaría si la variable no está vacía
  14.  
  15.                  AND apellidos LIKE '%" . $vnm. "%'

No sé si te servirá, pero te doy la idea, a ver si hay suerte...

.
rbczgz, gracias por contestar pero no me saca ningún resultado
  #5 (permalink)  
Antiguo 22/12/2012, 04:40
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: Hacer consulta filtrando datos

He estado probando, y si lo pongo así:

Código MySQL:
Ver original
  1. SELECT U.NUM_USUARIO,U.telefono,U.nombre,U.apellidos,D.poblacion
  2. FROM usuarios U,dir_usuarios D
  3. WHERE  U.NUM_USUARIO=D.NUM_USUARIO AND U.telefono='$vte' AND U.apellidos LIKE '%$vnm%'

Por nº de teléfono va bien pero por apellidos no. No tiene sentido no?

Última edición por gnzsoloyo; 22/12/2012 a las 05:29
  #6 (permalink)  
Antiguo 22/12/2012, 05:12
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: Hacer consulta filtrando datos

Cita:
Iniciado por satjaen Ver Mensaje
He estado probando, y si lo pongo así:

Código MySQL:
Ver original
  1. SELECT U.NUM_USUARIO,U.telefono,U.nombre,U.apellidos,D.poblacion
  2. FROM usuarios U,dir_usuarios D
  3. WHERE  U.NUM_USUARIO=D.NUM_USUARIO AND U.telefono='$vte' AND U.apellidos LIKE '%$vnm%';

Por nº de teléfono va bien pero por apellidos no. No tiene sentido no?
Vale, es que para que me encuentre resultados por apellidos tengo que meter el teléfono que corresponde a dicho apellido. Hay posibilidad de que sin meter el teléfono me encuentre los apellidos?

Última edición por gnzsoloyo; 22/12/2012 a las 05:29
  #7 (permalink)  
Antiguo 25/12/2012, 13:16
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: Hacer consulta filtrando datos

Por favor, si me pasais a php a lo mejor me pueden ayudar.
  #8 (permalink)  
Antiguo 25/12/2012, 13:22
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Hacer consulta filtrando datos

Solo tienes que usar empty() para verificar que las variables no estén vacías, y si lo están, no incluir esa condición en la consulta, ya que la comparación campo LIKE '%%' siempre dará verdadero.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 25/12/2012, 13:35
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: Hacer consulta filtrando datos

Cita:
Iniciado por David Ver Mensaje
Solo tienes que usar empty() para verificar que las variables no estén vacías, y si lo están, no incluir esa condición en la consulta, ya que la comparación campo LIKE '%%' siempre dará verdadero.
Lo siento, David pero no contestaba nadie y pensaba que me tenían que transladar.

Gracias por contestar, he intentado con empty(), pero no logro sacarlo. Nunca he realizado esa consulta. Podrías ayudarme por favor.
  #10 (permalink)  
Antiguo 25/12/2012, 14:04
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Hacer consulta filtrando datos

Se trata de emplear el sentido común, si no hay valor ¿para que construir la consulta?

Código PHP:
$foo '';
$bar '';

if ( ! empty(
$foo)) {
  
// no está vacío
  
$bar .= 'condición si existe $foo';

PDTA: consulta el manual, ahí hay ejemplos y todo.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 25/12/2012, 14:10
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: Hacer consulta filtrando datos

Cita:
Iniciado por pateketrueke Ver Mensaje
Se trata de emplear el sentido común, si no hay valor ¿para que construir la consulta?

Código PHP:
$foo '';
$bar '';

if ( ! empty(
$foo)) {
  
// no está vacío
  
$bar .= 'condición si existe $foo';

PDTA: consulta el manual, ahí hay ejemplos y todo.
Gracias, pateketrueke entiendo la condicion lo que pasa es que no sé como aplicarla en el cod:



Código PHP:
<?php 
include("Connections/conexion.php");
if (
$_GET["action"] == "listar")
{
    
// valores recibidos por POST
    
$vte $_POST['telefono'];
    
$ape $_POST['APELLIDOS'];
    
    
$sql "SELECT U.NUM_USUARIO,U.telefono,U.nombre,U.apellidos,D.poblacion
FROM usuarios U,dir_usuarios D 
WHERE  U.NUM_USUARIO=D.NUM_USUARIO AND U.telefono='$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(
            
'NUM_USUARIO'          => $row['NUM_USUARIO'],
            
'telefono'          => $row['telefono'],
            
'nombre'      => $row['nombre'],
            
'apellidos'       => $row['apellidos'],
            
'poblacion'        => $row['poblacion'],
            
'aparato'          => $row['aparato'],
            
'marca'          => $row['marca'],
            
'modelo'      => $row['modelo'],
            
'num_serie'       => $row['num_serie'],
            
'num_producto'        => $row['num_producto'],
            
'fecha_compra'        => $row['fecha_compra'],
            
'num_aviso'          => $row['num_aviso'],
            
'num_usuario'          => $row['num_usuario'],
            
'aparato'      => $row['aparato'],
            
'calle'       => $row['calle'],
            
'fecha_recepcion'        => $row['fecha_recepcion'],
            
'fecha_emision'        => $row['fecha_emision'],
            
'sintoma'        => $row['sintoma']
        );
    }
    
// convertimos el array de datos a formato json
    
echo json_encode($datos);
/* Tienes resultados. */
} else{
/* No hay resultados, hacer la segunda consulta a la otra tabla. */
if (mysql_num_rows($query) == 0){
$sql1 "SELECT telefono,nombre,apellidos,id_aviso,poblacion FROM  avisos_wed  WHERE telefono='$vte'";            
  
// Ordenar por
    
$vorder $_POST['orderby'];
    
    if(
$vorder != ''){
        
$sql1 .= " ORDER BY ".$vorder;
    }
    
    
$query mysql_query($sql1);
    
$datos = array();
    while(
$row mysql_fetch_array($query))
    {
        
$datos[] = array(
            
'NUM_USUARIO'          => $row['id_aviso'],
            
'telefono'          => $row['telefono'],
            
'nombre'      => $row['nombre'],
            
'apellidos'       => $row['apellidos'],
            
'poblacion'        => $row['poblacion'],
            
'aparato'          => $row['aparato'],
            
'marca'          => $row['marca'],
            
'modelo'      => $row['modelo'],
            
'num_serie'       => $row['num_serie'],
            
'num_producto'        => $row['num_producto'],
            
'fecha_compra'        => $row['fecha_compra'],
            
'num_aviso'          => $row['num_aviso'],
            
'num_usuario'          => $row['num_usuario'],
            
'aparato'      => $row['aparato'],
            
'calle'       => $row['calle'],
            
'fecha_recepcion'        => $row['fecha_recepcion'],
            
'fecha_emision'        => $row['fecha_emision'],
            
'sintoma'        => $row['sintoma']
        );
       }
    
// convertimos el array de datos a formato json
    
echo json_encode($datos); 
  }
 }
}
?>
  #12 (permalink)  
Antiguo 25/12/2012, 14: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: Hacer consulta filtrando datos

Parece ser que ya me funciona. Como lo veis?

Código PHP:
Ver original
  1. $vte = $_POST['telefono'];
  2. $ape = $_POST['APELLIDOS'];
  3.    
  4. if ( ! empty($vte)) {
  5.  $sql = "SELECT U.NUM_USUARIO,U.telefono,U.nombre,U.apellidos,D.poblacion
  6. FROM usuarios U,dir_usuarios D
  7. WHERE  U.NUM_USUARIO=D.NUM_USUARIO AND U.telefono='$vte'";
  8. }
  9. if ( ! empty($ape)) {
  10.         $sql .= "SELECT U.NUM_USUARIO,U.telefono,U.nombre,U.apellidos,D.poblacion
  11. FROM usuarios U,dir_usuarios D
  12. WHERE  U.NUM_USUARIO=D.NUM_USUARIO AND U.apellidos='$ape'";
  13.     }

Última edición por satjaen; 17/01/2013 a las 03:17

Etiquetas: resultados, select, sql, campos
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 23:22.