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

Buscar una cadena de texto en base de datos

Estas en el tema de Buscar una cadena de texto en base de datos en el foro de Mysql en Foros del Web. Hola, me gustaria poder hacer lo siguiente. Yo tengo una base de datos, y quiero hacer una consulta, mediante la cual yo le meto una ...
  #1 (permalink)  
Antiguo 12/08/2010, 10:41
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 9 meses
Puntos: 0
Buscar una cadena de texto en base de datos

Hola, me gustaria poder hacer lo siguiente.


Yo tengo una base de datos, y quiero hacer una consulta, mediante la cual yo le meto una o varias palabras, y me busque en una tabla de mi base de datos los articulos que contienen dichas palabras en alguno de sus campos.


NOMBRE MARCA AÑO TIPO
Windows 95 Microsoft 1995 Sistema Operativo
Nvidia Gforce Nvidia 1993 tarjeta grafica
Mouse Generic Generic 1995 periferico
Keyboard Microsoft 1996 periferico
Windows 2000 Microsfot 2000 Sistema Operativo



De modo que si introduzco "Wind" me muestre como resultado los 2 Windows, etc etc.....
  #2 (permalink)  
Antiguo 12/08/2010, 11:20
 
Fecha de Ingreso: julio-2010
Mensajes: 24
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Buscar una cadena de texto en base de datos

Si no te e entendido mal lo que necesitas es la función like
Aquí esta explicada ^^[URL="http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html"]http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html[/URL]
  #3 (permalink)  
Antiguo 12/08/2010, 11:32
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Buscar una cadena de texto en base de datos

mmm like creo que no me sirve...

Lo que yo quiero es que por ejemplo, si en el campo nombre tengo en la base de datos "Windows 95" y "Windows 2000" que introduciendo la cadena a buscar "Wind" por ejemplo, me de como resultado Windows 95 y Windows 2000.

No se si m explique bien ahora...

Un saludo


EDITADO:

Si que me sirve, me he dado cuenta que me fallaba el añadir al principio y final de la cadena a buscar el %, Muchas gracias por la ayuda!
  #4 (permalink)  
Antiguo 12/08/2010, 11:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Buscar una cadena de texto en base de datos

prueba con el operador %, que puede anteponerse o posponerse a la cadena y que es igual a cualquier parte de cadena.

... LIKE 'Wind%'

Edito: llegué tarde a tu edición.
  #5 (permalink)  
Antiguo 12/08/2010, 12:03
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Buscar una cadena de texto en base de datos

Gracias de todos modos Jurena, la ayuda siempre es bien recibida.

Ahora me queda aprender a manejar lo que lei por ahi de FULLTEXT para poder buscar en la base de datos en caso de que meta 2 palabras, y que en la base de datos no sigan ese orden.

Es decir, que si en la base de datos tengo "Windows 95" que si yo introduzco a buscar "95 Windows" tambien me muestre el resultado.
  #6 (permalink)  
Antiguo 13/08/2010, 02:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Buscar una cadena de texto en base de datos

95 son sólo dos caracteres y FULL TEXT tiene una serie de limitaciones, como que sólo busca por defecto palabras (ojo, palabras de más de tres caracteres, para evitar encontrar términos muy repetidos como artículos, pronombres, etc.). Tampoco encontrará aquello que aparezca en 50% o más de los registros. Es decir, que si Windows aparece en un 51% de los registros en que buscas, simplemente no lo encontrará. Echa un vistazo tranquilo a FULLTEXT en el manual de MySQL. Permite hacer muchas cosas, pero ya sabes que sólo se usa en tablas MyIsam.
  #7 (permalink)  
Antiguo 13/08/2010, 11:04
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Buscar una cadena de texto en base de datos

Cita:
Iniciado por jurena Ver Mensaje
95 son sólo dos caracteres y FULL TEXT tiene una serie de limitaciones, como que sólo busca por defecto palabras (ojo, palabras de más de tres caracteres, para evitar encontrar términos muy repetidos como artículos, pronombres, etc.). Tampoco encontrará aquello que aparezca en 50% o más de los registros. Es decir, que si Windows aparece en un 51% de los registros en que buscas, simplemente no lo encontrará. Echa un vistazo tranquilo a FULLTEXT en el manual de MySQL. Permite hacer muchas cosas, pero ya sabes que sólo se usa en tablas MyIsam.

Gracias por la respuesta Jurena, la verdad que no se lo que son tablas MyIsam....

Yo lo quiero usar en una aplicacion php conectada a una base de datos mysql....


Y algun consejo o solucion para lo que deseo alternativo a fulltext????

Me gustaria conseguir lo que dije,creo que si me explique bien, por si acaso aqui lo digo de nuevo:


Imaginamos una base de datos de peliculas:

4 bodas y un funeral
La boda de mi mejor amigo
mejor imposible
american pie 3
american pie 4


Pues quiero que si busco por "pie american", me muestre como resultado las dos peliculas:
american pie 3
american pie 4

Es decir, que me busque ambas palabras.

La solucion que se me ocurre es separar lo introducido en la busqueda en varias palabras eliminando espacios, y buscar ambas palabras por separado, y mostrar el resultado en el caso que coincidan las dos en un mismo articulo, pero no se si habra un modo mas aconsejable para hacerlo.



EDITADO:

Ya esta solucionado, al final lo hice gracias a un codigo que encontre, aqui lo dejo por si puede ayudar a alguien mas:


Se separan las palabras recibidas a buscar:
Código:
<?
$consulta = $_GET["$q"];
$consulta = split(' ',$consulta);
?>
Y creamos la consulta:
Código:
<?
$sql = "SELECT * FROM paginas WHERE ";
for($a = 0; $a < count($consulta); $a++){
   if($consulta[$a] != ''){
      if($a != 0)$sql .= 'AND ';
      $sql .= "texto LIKE '%".$consulta[$a]."%'";
   }
}
?>


Fuente: http://www.programacionweb.net/articulos/articulo/?num=50

Última edición por MARTIN_LAW; 13/08/2010 a las 11:51
  #8 (permalink)  
Antiguo 13/08/2010, 12:02
 
Fecha de Ingreso: julio-2010
Mensajes: 121
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Buscar una cadena de texto en base de datos

He encontrado una cosa que no me funciona.......

Si yo quiero buscar en otro campo de la tabla, ademas de en texto, uso un OR, pero entonces si meto mas de 3 palabras en la busqueda, me da mal los resultados, no me lo muestra correctamente, alguien sabe porque puede ser???

Codigo de la consulta realizada:
Código:
   $sql = "SELECT * FROM nombretabla WHERE ";
	for($a = 0; $a < count($consulta); $a++)
	   {
   		if($consulta[$a] != '')
		   {
      			if($a != 0)
			   $sql .= 'AND ';
     			   $sql .= "campo1 LIKE '%".$consulta[$a]."%' OR campo2 LIKE '%".$consulta[$a]."%' OR campo3 LIKE '%".$consulta[$a]."%'";
   		   }
	   }
Gracias!


EDITADO: no he dicho nada, me faltaba un parentesis para juntar los OR
  #9 (permalink)  
Antiguo 13/08/2010, 12:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Buscar una cadena de texto en base de datos

Para eso lo mejor, si el motor de tus tablas es MyIsam, es usar índices Fulltext. Mira si tus tablas son MyIsam escribiendo esto:
SELECT table_name, table_type, engine FROM information_schema.tables WHERE table_schema = 'nombredetubase'

Esto te mostrará el nombre, el tipo de tabla y el motor de tu las tablas de tu base de datos. Mira a ver si usas MyIsam y puedes aprovechar el enorme potencial de FullText.

Etiquetas: cadenas
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:40.