Foros del Web » Programando para Internet » PHP »

Encontrar en la BD solo con una parte de lo almacenado

Estas en el tema de Encontrar en la BD solo con una parte de lo almacenado en el foro de PHP en Foros del Web. Hola forer@s!! Me explico, tengo una pagina web PHP con Mysql en la que una de sus opciones es buscar cliente. Metes el nombre y/o ...
  #1 (permalink)  
Antiguo 08/03/2010, 04:05
 
Fecha de Ingreso: octubre-2009
Mensajes: 154
Antigüedad: 14 años, 6 meses
Puntos: 0
Encontrar en la BD solo con una parte de lo almacenado

Hola forer@s!!
Me explico, tengo una pagina web PHP con Mysql en la que una de sus opciones es buscar cliente. Metes el nombre y/o el apellido y t da toda la informacion de ese cliente, si hubiera varios te ensenna la informacion de todos.Puedes poner solo el apellido, solo el nombre o los dos. Hasta ahi todo perfecto, funciona muy bien.
Ahora, un mes despues de estar todo cerrado y terminado me piden que si por ejemplo en la base de datos esta el nombre 'Ana Maria Lopez' solo poniendo Ana en el hueco del nombre, me salgan las que se llaman Ana pero tambien las que se llaman Ana Maria, Ana Lucia, Ana...
Yo en la BD utilizo una comparacion asi:

elseif (empty($lastname))
{
$sql = "select title, firstname, surname, company, address, postcode, tel, mobile_phone, fax, email, country

from customers

where (firstname = '$firstname')";

$result = send_sql($MySQL->db1, $sql);
}


si esta vacio el apellido compara el nombre con los nombres de la BD, pero como puedo hacerlo?Tiene que ser algo que sea encontrar igual hasta que haya un espacio vacio o algo asi?

muchas gracias!!
  #2 (permalink)  
Antiguo 08/03/2010, 04:14
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

Esto es cosa del sql.


En las sentencias SQL existe la "clausula" LIKE, que es para buscar.

Por ejemplo
"SELECT `nombre` FROM `tabla` WHERE `nombre` LIKE 'And'";
Eso te listaria los siguientes nombres:
Andres
Andy


Puedes usar como comodin el % para que sea X caracteres desconocidos (LIKE '%And' y te listaria MAnd)

Revisate la documentacion del like, q todo esto te lo digo de memoria :)
  #3 (permalink)  
Antiguo 08/03/2010, 04:36
 
Fecha de Ingreso: octubre-2009
Mensajes: 154
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

Gracias,
Como primera idea esta bien pero el problema es que la busqueda es muy general, entonces, en mi variable $firstname esta dentro por ejemplo 'Jose Maria' pero todo dentro de esa variable que es la que comparo, no puedo comparar trozos de variables porque no se cual es el nombre que cada vez voy a comparar...

Entiendes lo que quiero decir?

  #4 (permalink)  
Antiguo 08/03/2010, 04:55
 
Fecha de Ingreso: diciembre-2009
Ubicación: entre Ibiza y Barcelona :)
Mensajes: 92
Antigüedad: 14 años, 4 meses
Puntos: 3
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

y con:

"SELECT `nombre` FROM `tabla` WHERE `nombre`LIKE '%".$nom." '

ó

"SELECT `nombre` FROM `tabla` WHERE `nombre` LIKE '%$nom'
  #5 (permalink)  
Antiguo 08/03/2010, 05:05
 
Fecha de Ingreso: octubre-2009
Mensajes: 154
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

Marinesky, con tu query no me da error pero no me muestra nada.
Me va al template de informacion de cliente pero esta en blanco...
  #6 (permalink)  
Antiguo 08/03/2010, 05:26
 
Fecha de Ingreso: diciembre-2009
Ubicación: entre Ibiza y Barcelona :)
Mensajes: 92
Antigüedad: 14 años, 4 meses
Puntos: 3
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

nose si tendra algo que ver, pero si pruebas a cambiar:
esto:
Código PHP:
$sql "select title, firstname, surname, company, address, postcode, tel, mobile_phone, fax, email, country from customers where (firstname = '$firstname')"
por esto:
Código PHP:
$sql "select title, firstname, surname, company, address, postcode, tel, mobile_phone, fax, email, country from customers where (firstname = '".$firstname."') "
__________________
La mujer salió de la costilla del hombre,no de los pies para ser pisoteada,sino del lado para ser igual...Debajo del brazo para ser protegida y al lado del corazón para ser Amada...
  #7 (permalink)  
Antiguo 08/03/2010, 05:36
 
Fecha de Ingreso: octubre-2009
Mensajes: 154
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

gracias!

Eso ya lo he probado y nada, funciona igual que como si no lo cambias..

Tambien he probado:

SQL = "SELECT * FROM tabla WHERE campo LIKE ' " & a_consultar & "% ' "
y aqui me da error de sintaxis..
  #8 (permalink)  
Antiguo 08/03/2010, 05:45
 
Fecha de Ingreso: diciembre-2009
Ubicación: entre Ibiza y Barcelona :)
Mensajes: 92
Antigüedad: 14 años, 4 meses
Puntos: 3
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

quizas los del firstname que te he dicho no sea el problema, pero igualmente tienes que ponerlo como te he dicho, porque de la forma quelo tienes tu estas diciendo que cuando firstname = $firstname y tu lo que quieres es que firstname sea igual al valor del nombre que introduzcas.

Y lo de error de sintaxis es que nose que es &a_consultar& en tu codigo.

sino es una variable con que pongas '&aconsultar&%'
__________________
La mujer salió de la costilla del hombre,no de los pies para ser pisoteada,sino del lado para ser igual...Debajo del brazo para ser protegida y al lado del corazón para ser Amada...
  #9 (permalink)  
Antiguo 08/03/2010, 06:21
 
Fecha de Ingreso: octubre-2009
Mensajes: 154
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

poniendolo asi me funciona en todos los casos menos en los que por ejemplo solo hay un nombre asi Eduardo Pedro y no hay ningun Eduardo guardado en la BD como nombre simple,eso no creo que sea dificil de hacer:

where (firstname = '$firstname') or (firstname like '".$firstname." %')";

el problema es que tiene que haber un espacio entre las " y el % !!!!!!!!
  #10 (permalink)  
Antiguo 09/03/2010, 03:54
 
Fecha de Ingreso: octubre-2009
Mensajes: 154
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

Ahora me pasa lo siguiente:

Ej. Tengo en la BD
Eduardo Jose
Eduardo Pedro
Eduardo Luis
Eduardo

ahora mismo si pongo 'Eduardo' me encuentra los 4 valores, que es lo que tiene que hacer, pero, si tengo esto en la BD:

Luis Manuel

y busco 'Luis'me dice que no lo encuentra, que no hay cliente con ese nombre, esta es mi consulta:

$sql = "select title, firstname, surname, company, address, postcode, tel, mobile_phone, fax, email, country

from customers

where ((firstname like '".$firstname." %') or (firstname = '$firstname'))";


creo que como no cumple una de las condiciones del or, me dice que no existe,que puedo hacer para que en el caso de que solo haya un nombre compuesto pero no el simple me muestre el compuesto?

Gracias!!
  #11 (permalink)  
Antiguo 10/03/2010, 02:57
 
Fecha de Ingreso: diciembre-2009
Ubicación: entre Ibiza y Barcelona :)
Mensajes: 92
Antigüedad: 14 años, 4 meses
Puntos: 3
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

pues nose prueba poniendo un AND
__________________
La mujer salió de la costilla del hombre,no de los pies para ser pisoteada,sino del lado para ser igual...Debajo del brazo para ser protegida y al lado del corazón para ser Amada...
  #12 (permalink)  
Antiguo 10/03/2010, 03:08
 
Fecha de Ingreso: octubre-2009
Mensajes: 154
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

nada marinesky, si pongo AND no me sale nada y he probado tambien con XOR, he probado todas las xorradas que se me puedan imaginar 'por si acaso' pero sigue sin funcionar, alomjor es algo de la BD...
gracias de todas maneras!
  #13 (permalink)  
Antiguo 10/03/2010, 03:21
 
Fecha de Ingreso: diciembre-2009
Ubicación: entre Ibiza y Barcelona :)
Mensajes: 92
Antigüedad: 14 años, 4 meses
Puntos: 3
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

pero es que es muy raro...si con eduardo te va te tendria q ir con luis y con quien le pusieras...
por lo tanto si con uno te funcion no esta el problema en la BD.
pon el codigo completo a ver si hay algo que se nos escapa.
__________________
La mujer salió de la costilla del hombre,no de los pies para ser pisoteada,sino del lado para ser igual...Debajo del brazo para ser protegida y al lado del corazón para ser Amada...
  #14 (permalink)  
Antiguo 10/03/2010, 03:31
 
Fecha de Ingreso: octubre-2009
Mensajes: 154
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

es muy sencillito,lo busco y lo saco como si fuera una lista por pantalla..

global $HTTP_POST_VARS;

global $MySQL;



$firstname = $HTTP_POST_VARS['firstname_html'];


$lastname = $HTTP_POST_VARS['lastname_html'];

$table_id = R4decrypt($HTTP_POST_VARS['custolist']);


//prueba=permission( $firstname);

$tpl = new FastTemplate(".");

$tpl->define(array("main" => $scriptname));




//conditions to do the correct query

if ((empty($firstname)) and (empty($lastname)) and ($table_id>0))
{
$sql = "select title, cus_id, firstname, surname, company, address, postcode, tel, mobile_phone, fax, email, country

from customers

where (cus_id = '$table_id')";


$result = send_sql($MySQL->db1, $sql);
}

elseif (empty($lastname))
{
$sql = "select title, firstname, surname, company, address, postcode, tel, mobile_phone, fax, email, country

from customers

where ((firstname like '".$firstname." %') or (firstname = '$firstname'))";

$result = send_sql($MySQL->db1, $sql);
}

elseif (empty($firstname))
{
$sql = "select title, firstname, surname, company, address, postcode, tel, mobile_phone, fax, email, country

from customers

where (surname = '$lastname')";


$result = send_sql($MySQL->db1, $sql);
}

else
{
$sql = "select title, firstname, surname, company, address, postcode, tel, mobile_phone, fax, email, country

from customers

where (firstname = '$firstname') and (surname = '$lastname')";



$result = send_sql($MySQL->db1, $sql);
}



$tpl->parse(result, "main");

$tpl->FastPrint(result); //print as main the correct file


if (!$result)

{

die ("Database Error");
}


$num_user=(mysql_num_rows($result)); //number of rows

//linefor separate title from text
echo('<font color=#0000A0 >_________________________________________________ __________</font>');
echo('<br></br>');

while ($num_user != 0) //while there are users...
{


While ($row = mysql_fetch_array($result)) //...write information about them
{

echo ('<b><font color=#000000></b>');
echo('<b><font style="line-height: 60%;"> <FONT SIZE="3" color=#0000A0 >Title: </FONT></b>'); echo ($row["title"]);
echo('<br></br>');
echo('<b> <FONT SIZE="3" color=#0000A0> First name: </FONT></b>'); echo ($row["firstname"]);
echo('<br></br>');
echo('<b> <FONT SIZE="3" color=#0000A0> Last name: </FONT></b>'); echo ($row["surname"]);


echo('<br></br>');
echo('<b> <FONT SIZE="3" color=#0000A0> Company: </FONT></b>'); echo ($row["company"]);
echo('<br></br>');
echo('<b> <FONT SIZE="3" color=#0000A0> Address: </FONT></b>'); echo ($row["address"]);
echo('<br></br>');
echo('<b> <FONT SIZE="3" color=#0000A0> Postcode: </FONT></b>'); echo ($row["postcode"]);
echo('<br></br>');
echo('<b> <FONT SIZE="3" color=#0000A0> Phone: </FONT></b>'); echo ($row["tel"]);
echo('<br></br>');
echo('<b> <FONT SIZE="3" color=#0000A0> Mobile Phone: </FONT> </b>'); echo ($row["mobile_phone"]);
echo('<br></br>');
echo('<b><FONT SIZE="3" color=#0000A0> Fax: </FONT></b>'); echo ($row["fax"]);
echo('<br></br>');
echo('<b><FONT SIZE="3" color=#0000A0> Email: </FONT></b>'); echo ($row["email"]);
echo('<br></br>');
echo('<b> <FONT SIZE="3" color=#0000A0> Country: </FONT></b>'); echo ($row["country"]);
echo('<br></br>');

echo('<font color=#0000A0 >_________________________________________________ __________</font>');
echo('<br></br>');
echo('<br></br>');
}


$num_user--;
}









}
  #15 (permalink)  
Antiguo 10/03/2010, 11:44
 
Fecha de Ingreso: marzo-2010
Ubicación: Lima, Perú
Mensajes: 136
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

Una consulta, has escrito el codigo o lo has bajado de algún lugar???
porque cambias en algunas lados surname por lastname???

deberias de refactorizar la pagina, hay POO que quizás no entiendas. Separa la presentacion del Codigo, la verdad que el codigo me parece muy engorroso.

Saludos
  #16 (permalink)  
Antiguo 11/03/2010, 02:27
 
Fecha de Ingreso: octubre-2009
Mensajes: 154
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Encontrar en la BD solo con una parte de lo almacenado

Hola!
He he hecho yo todo desde cero, lo que pasa es que es una nueva funcionalidad dentro de una pagina ya existente, por eso lo del 'surname' y 'lastname', no tiene muxo sentido pero asi estaba echo, 'surname' es el nombre en la tabla de la BD y 'lastname' la variable donde guardo el valor al sacarlo de ella. Pero eso esta bien, es todo el rato igual.
No creo que sea tan engorroso, tengo 4 condiciones, o elegir directamente de una lista, o meter el nombre, o meter el apellido o meter nombre y apelllido y luego lo saco por pantalla con los 'echo' ...


Etiquetas: bd, encontrar, almacenar
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 16:55.