Foros del Web » Programando para Internet » PHP »

problemas con buscador o consultor a mysql

Estas en el tema de problemas con buscador o consultor a mysql en el foro de PHP en Foros del Web. Hola a todos, tengo el siguiente problema y si alguien me puede ayudar se lo agradeceria: tengo un buscador de nombres hacia una tabla de ...
  #1 (permalink)  
Antiguo 24/07/2013, 09:00
 
Fecha de Ingreso: junio-2013
Ubicación: santiago
Mensajes: 34
Antigüedad: 10 años, 10 meses
Puntos: 0
problemas con buscador o consultor a mysql

Hola a todos,

tengo el siguiente problema y si alguien me puede ayudar se lo agradeceria:

tengo un buscador de nombres hacia una tabla de la base de datos, funciona todo bien, pero el problema el el siguiente:

ejemplo con un nombre:

VICTOR MANUEL ARRIAGADA CONTRERAS

al buscar por: VICTOR -> aparece sus datos

al buscar por: VICTOR MANUEL -> aparece sus datos

al buscar por: VICTOR MANUEL ARRIAGADA -> aparece sus datos

al buscar por: VICTOR MANUEL ARRIAGADA CONTRERAS -> aparece sus datos


los problemas bienen en lo siguiente:

al buscar por: VICTOR ARRIAGADA -> "no" aparece sus datos, no busca nada

al buscar por: VICTOR CONTRERAS -> "no" aparece sus datos, no busca nada

conclusion: cuando separo los datos a buscar, no me funciona,

aqui mando el codigo, saludos y gracias.




Código PHP:
<html> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<link href="style.css" rel="stylesheet" type="text/css" />
<body> 
<form method="POST" action="busca_nombre1.php"> 
<strong>Nombre Completo:</strong> 
<input type="text" name="busca" id="busca" size="20">
<label>
<input type="submit" name="Sutbmit" value="buscar" > 
</label>
</form> 
</body> 

<div id="content">

<table border="0">

<?php

$busca
=""//variable vacia para que se inicalize
$busca=$_POST['busca'];  // variable capture lo que hay en el campo de busca 



$link mysql_connect("localhost","root","12345");
    if (!
$link) {
        die(
'error al conextarse:' mysql_error());
    }

    
mysql_select_db("prueba_db"$link);
    
mysql_query("set names utf8");


if(
$busca!=""){

$busqueda =mysql_query("SELECT t1.nombre, t1.rut, t1.jg, t1.sala_piso, t2.lugar, t2.juzgado_garantia FROM excel t1
      LEFT OUTER JOIN juzgados t2 on t1.jg=t2.numero
      where nombre like '%"
.$busca."%'"); 





while(
$f=mysql_fetch_array($busqueda)){
?>

 
  <tr>
    <td>Nombre Completo:</td>
  <td><?php echo $f['nombre'?></td>
  </tr>
  <tr>
    <td>Rut:</td>
    <td><?php echo $f['rut'?></td>
  </tr>
  <tr>
    <td>Juzgado de Garantía:</td>
    <td><?php echo $f['juzgado_garantia']  ?>&nbsp;/&nbsp;<?php echo $f['lugar'?></td>
  </tr>
  <tr>
    <td>Sala - Piso:</td>
   <td><?php echo $f['sala_piso'?></td>
  </tr>


<?php
}

}
?>
</tbody>
</table>
</div>
  #2 (permalink)  
Antiguo 24/07/2013, 09:45
 
Fecha de Ingreso: mayo-2009
Mensajes: 1
Antigüedad: 15 años
Puntos: 0
Respuesta: problemas con buscador o consultor a mysql

Holas soy recontra nuevo pero con muchas ganas de aprender asi que espero me disculpen si equivoco mi comentario.
Me parece que el error esta en como recoges tu variable $busca ya que te genera un string que lo compara con la cadena que recoges de tu base de datos, es como que tu cadena es "dc" y la tratas de buscar dentro de "abcd", simplemente no la va a encontrar, lo que podrias intentar es recoger los nombres y apellidos por separado en varios input's y luego concatenarlos, o tambien podrias recoger su string en un arreglo de modo que al hacer la consulta en tu BD te quede algo asi:

Código SQL:
Ver original
  1. WHERE nombre LIKE '%".$nombre."%".$apellido."%');
  #3 (permalink)  
Antiguo 24/07/2013, 10:17
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: problemas con buscador o consultor a mysql

Lo que tendrias que hacer es preguntar por cada palabra, algo así:

SELECT t1.nombre, t1.rut, t1.jg, t1.sala_piso, t2.lugar, t2.juzgado_garantia FROM excel t1
LEFT OUTER JOIN juzgados t2 on t1.jg=t2.numero
where nombre like '%".$busca1."%' AND nombre like '%".$busca2."%' AND nombre like '%".$busca3."%'

para esto tendrías que hacer un explode() de los términos de búsqueda para separar los elementos en un array.

Código PHP:
Ver original
  1. $ex=explode(" ",$busca);

Luego haces un foreach con el cual iras agregando cada termino de la búsqueda para que quede como puse antes.

Código PHP:
Ver original
  1. $query="SELECT t1.nombre, t1.rut, t1.jg, t1.sala_piso, t2.lugar, t2.juzgado_garantia FROM excel t1
  2. LEFT OUTER JOIN juzgados t2 on t1.jg=t2.numero
  3. where 1 ";
  4. foreach($ex as $val)
  5. $query.=" AND nombre like '%$val%'";
  6. $busqueda =mysql_query($query);

Saludos
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #4 (permalink)  
Antiguo 24/07/2013, 11:08
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: problemas con buscador o consultor a mysql

Yo en este caso recurriría a un buscador con FULLTEXT, puesto que te va a otorgar mayor flexibilidad para encontrar los nombres en los distintos campos, tiene sus inconvenientes pero están en el enlace que te dejo.

Aunque like al tener solo un campo con el nombre tendría que funcionar y ver algún que otro caso especial que se te puede llegar a dar.

http://dev.mysql.com/doc/refman/5.0/...xt-search.html

Saludos
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #5 (permalink)  
Antiguo 24/07/2013, 11:42
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: problemas con buscador o consultor a mysql

Si estas usando tablas innodb puedes usar Full-Text Search solo a partir de la version 5.6 de MySQL.
Para versiones anteriores tienes que usar tablas MyISAM o búsquedas con Like.

Si vas a usar la solución que propone Stramin no necesitas el foreach solo cambia la condición usando OR.

Código SQL:
Ver original
  1. WHERE nombre LIKE '%".$busca1."%' OR nombre LIKE '%".$busca2."%' OR nombre LIKE '%".$busca3."%'
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #6 (permalink)  
Antiguo 24/07/2013, 11:48
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: problemas con buscador o consultor a mysql

Estimado hhs, es necesario el foreach para agregar cada uno de esos términos a la consulta, aunque también podría ser un implode... como sea sería necesario generar la consulta con esos términos.

Separarlos por OR no es buena idea ya que si alguien busca "VICTOR SEPULVEDA" encontraría a "VICTOR ARRIAGADA", "VICTORIA ADDAMS", "MANUEL SEPULVEDA", etc.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D

Etiquetas: buscador, html, mysql, select, sql, tabla, variable
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 20:50.