Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Like???

Estas en el tema de Like??? en el foro de Mysql en Foros del Web. hola estoy usando php +mysql bueno estoy haciendo una consulta asi: $sql=mysql_query("SELECT * FROM $tablex WHERE $buscar_en LIKE '%$palabra_buscar%'"); donde la variable $buscar_en tiene el ...
  #1 (permalink)  
Antiguo 06/06/2008, 21:08
Avatar de Mcruzmx  
Fecha de Ingreso: abril-2006
Mensajes: 357
Antigüedad: 18 años
Puntos: 9
Pregunta Like???

hola estoy usando php +mysql bueno estoy haciendo una consulta asi:

$sql=mysql_query("SELECT * FROM $tablex WHERE $buscar_en LIKE '%$palabra_buscar%'");

donde la variable $buscar_en tiene el valor del nombre de uno de los campos de la tabla (se selecciona en un form) y de igual manera $palabra_buscar se llena con la informacion de un text box de un formulario.

bueno la pregunta es, ke no se como hacer para hacer una busqueda con like pero que se haga en cualquier campo, es decir, por ejemplo que me muestre resultados de:

mostrar resultados de "cosa" cuando se encuentre en cualquier campo.


intente con * LIKE blabla pero obiamente no funciona, gracias por su ayuda.
  #2 (permalink)  
Antiguo 06/06/2008, 21:37
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: Like???

Puedes crear un indice Full-Tex y luego realizar la búsqueda en dicho indice, mas info en este link
http://dev.mysql.com/doc/refman/5.0/...xt-search.html
SAludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #3 (permalink)  
Antiguo 06/06/2008, 21:51
Avatar de Mcruzmx  
Fecha de Ingreso: abril-2006
Mensajes: 357
Antigüedad: 18 años
Puntos: 9
Respuesta: Like???

bueno, creo que es el mismo problema, en ese ejemplo (link) dice que hay que indicar los campos donde se va a utilizar el match, entonces es lo mismo que el like, lo que me interesa es hacer una busqueda en todos los campos (como cuando se omite la clausula where) PERO que los resultados sean siempre y cuando se encuentre una coincidencia de X valor o caracter (que se este buscando) en cualquier campo, gracias.
  #4 (permalink)  
Antiguo 07/06/2008, 13:52
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Respuesta: Like???

Por más que veo y pruebo, MySQL no sabe que es $sql=mysql_query("SELECT * FROM $tablex WHERE $buscar_en LIKE '%$palabra_buscar%'");

Eso ya es código de programación y el error puede estar en el contenido de las variables. ¿Es muy difícil que las personas no puedan comprender la diferencia de SQL y programación?

Código PHP:
SELECT FROM nombre_tabla
WHERE nombre_variable LIKE 
'%lo que busco%' 
Lo anterior, es una sentencia SQL.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #5 (permalink)  
Antiguo 07/06/2008, 14:10
Avatar de Mcruzmx  
Fecha de Ingreso: abril-2006
Mensajes: 357
Antigüedad: 18 años
Puntos: 9
Respuesta: Like???

gracias por tu respuesta brujonic, mi pregunta es, es muy dificil leer bien? comente claramente estoy usando PHP+Mysql pues la cuestion en si es que estly trabajando como claramente se ve con variables php y sentencias sql, el codigo que pones es exactamente equivalente al que puse yo, si lo sabes verdad? bueno aun asi gracias por responder pero en tu clausula where si te fijas estas usando "nombre_variable" yo lo que necesito es que busque en TODOS lso campos cuando LIKE '%loquebusco%' gracias de nuevo
  #6 (permalink)  
Antiguo 07/06/2008, 20:08
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Respuesta: Like???

Parece que no comprendiste.

Si sabes usar MySQL, abre una ventana de terminal y ejecuta tal y como está esa sentencia. Igual lo podes hacer con phpMyAdmin o cualquier herramienta para administrar BD.

El ejemplo que estoy poniendo, es para ejemplificar que nombre_tabla, es el nombre real de la tabla y nombre_variable (que me equivoqué en ves de poner, nombre_campo), es un nombre real de un campo de la tabla.

Esa es la diferencia y si lees todo lo que escribí, puede que el error esté en el valor de las variables utilizadas en el código y no en la sentencia SQL. Ejecuta un echo de cada variable, toma los valores y luego ejecuta (valga la redundancia) MySQL, phpMyAdmid o cualquier administrador de BD con los valores reales. Si la sentencia SQL te da error, ahí si podes decir que tenes problemas con la sentencia y colocas los valores reales.

Si por el contrario, el SQL se ejecuta correctamente, vas a tener que revisar tu código.

¿Ahora comprendes? No es buscar discusión, sino, aclarar lo que es una cosa y otra.

Función de la sección de Base de Datos
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #7 (permalink)  
Antiguo 07/06/2008, 20:13
Avatar de Mcruzmx  
Fecha de Ingreso: abril-2006
Mensajes: 357
Antigüedad: 18 años
Puntos: 9
Respuesta: Like???

amigo, gracias por contestar, conozco y se usar sql entiendo perfectamente lo que dices, pero no es mi pregunta, mi pregunta en concreto es, si hay manera de omitir "CAMPO" a donde buscar (antes del LIKE) y poner algun tipo de comodin que permita que la clausula LIKE --- se aplique a TODOS los campos, es decir, seleccione todos los resultados de la tabla mientras que EN CUALQUIER CAMPO se encuentre LIKE '%loquebusco%'

gracias.
  #8 (permalink)  
Antiguo 07/06/2008, 20:34
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: Like???

Razona bien la pregunta: Si no le determinas en qué campo tiene que buscar, y el SQL solo entiende nombres de campos reales de una tabla (o al menos sus alias), ¿cómo puede hacer MySQL para adivinar a qué campos debe dedicar la búsqueda?
Ni MySQL ni ningún SGBD puede responder una pregunta de ese tipo. Las relaciones de comparación son siempre 1:1 UN Campo = UN valor.
Si la cosa es comparar con cualquier campo, entonces tendrás que crear tantas consultas como campos tienes en cada tabla... Cosa que tendrás que implementar a nivel de aplicación.
Me parece que estás complicando demasiado la idea y deberías reflexionar si existe alguna forma de definir un conjunto acotado de campos y tablas que deban consultarse. Eventualmente esto lo podrás hacer con sentencias preparadas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 07/06/2008, 20:42
Avatar de Mcruzmx  
Fecha de Ingreso: abril-2006
Mensajes: 357
Antigüedad: 18 años
Puntos: 9
Respuesta: Like???

bueno vaya, me ayuda el sarcasmo, sé que sql no adivina, sin enbargo por decir un ejemplo, es posible usar COMODINES como en el caso de SELECT * , el * es un comodin que es como SELECCIONAR TODOS LOS CAMPOS, si entiendes eso verdad? la pregunta esta bien razonada, en vista de que no es posible usar WHERE * LIKE '%loquebusco%' entonces buscare otra opcion por que al parecer no es posible hacer algo simitar. de cualquier forma deberas, muchas gracias por tu tiempo pues has sido el unico en contestar, gracias por eso. saludos :)
  #10 (permalink)  
Antiguo 07/06/2008, 20:54
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: Like???

El SQL no acepta comodines en el WHERE, y ese es parte de tu problema, simplemente porque no son parte del modelo del álgebra relacional, que es en definitiva de donde nacen los principios de las bases de datos.
No los admite porque de lo contrario los algoritmos que pudieran realizar tal consulta serían infinitos, a causa de las eventuales combinatorias de tales consultas.
Imaginate que un WHERE * LIKE '%xxxxx%' que abarcase todos los campos, además de toparse con conflictos de tipos de datos incompatibles, si la misma abarcase JOINS de generación dinámica los resultados tenderían al infinito.
Insisto: Si el modelo de datos de tu sistema es conocido, es también conocido el conjunto de campos que en diversas tablas debería poderse consultar para buscar ese dato. Ergo, deberías poder crear sentencias preparadas que acotasen las búsquedas a los campos realmente importantes.
Si el modelo de datos del sistema no es conocido, o el sistema es cambiante, entonces no hay técnica de programación o de bases de datos que sea aplicable.
Me sigue pareciendo que estás buscando una solución imposible o el problema está mal analizado.

De cualquier forma, mi sugerencia es que analices la posibilidad de implementar un store procedure con sentencias preparadas (13.7. Sintaxis SQL de sentencias preparadas), tal vez te sirva para salir del atolladero.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 07/06/2008, 20:59
Avatar de Mcruzmx  
Fecha de Ingreso: abril-2006
Mensajes: 357
Antigüedad: 18 años
Puntos: 9
Respuesta: Like???

gracias ya tenia lo que me recomiendas, gracias de nuevo.
  #12 (permalink)  
Antiguo 08/06/2008, 02:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Like???

Mcruzmx,

Gnzsoloyo te ha dado todas las explicaciones técnicas y te ha sugerido todas las posibles soluciones, que pasan por la programación mediante el programa que uses o mediante un store procedure.
Yo también me he planteado ese problema, y ahora gracias a las explicaciones dadas, entiendo que la sintaxis sql no permita esos asteriscos tras el where. Pero si tú usas MySQL tienes un control sobre los nombres de todos los campos de manera actualizada con una sintaxis como esta:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'nombretutabla'
AND table_schema = 'nombretubase'

Es una consulta a la estructura que te permite muchas más opciones. Los datos de esa consulta podrán ser cargados en el programa que uses para trabajar con la base y te permitirán lanzar una consulta con todos los nombres de los campos. Los programas para programar también tienen funciones para sacar todos los nombres de los campos (hablo por PHP, que es del que conozco algo).
Con Fulltext, la cosa es distinta, pues las tablas deben ser MyIsam y el índice debe haber sido creado previamente, por lo que resulta más difícil controlar que alguien haya añadido un campo y ya no lo tengas, aunque con consultas también se podrían sacar la lista de todos los campos y compararla con la lista de los que aparecen en el índice fulltext.
Del store procedure no sé mucho y gnzsoloyo podría decirte mucho más...

Solución encontrarás, eso es casi seguro, pero con programación.
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 18:39.