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

Consulta para que encuentre tambien en singular

Estas en el tema de Consulta para que encuentre tambien en singular en el foro de Mysql en Foros del Web. Hola amigos, Vereis tengo esta consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original select * FROM empresas_direcciones where nombre like '".$s." % ' " La cosa ...
  #1 (permalink)  
Antiguo 11/07/2013, 04:09
 
Fecha de Ingreso: marzo-2007
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 4
Consulta para que encuentre tambien en singular

Hola amigos,

Vereis tengo esta consulta:


Código MySQL:
Ver original
  1. select * FROM empresas_direcciones where nombre like '".$s."%'"
La cosa es que si buscamos peluquerias no encuentra los que tienen en la base de datos "peluqueria"

Entonces lo que necesitaria es que introducimos peluquerias, salgan las peluquerias y tambien los que tengan en la base de datos peluqueria

A ver si alguien sabe como podria hacer esto.

Un saludo!!

Última edición por gnzsoloyo; 11/07/2013 a las 08:04 Razón: Mal etiquetado
  #2 (permalink)  
Antiguo 11/07/2013, 05:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta para que encuentre tambien en singular

La forma de hacerlo bien es tener una tabla de "actividades" donde tengas el nombre de la actividad, por ejemplo

Actividades
id
nombre

donde

id Nombre
1 Peluqueria

luego guarda el identificador no el nombre con lo que todos los 1 son peluquerias... no hay error en la introducción de los datos.

El problema que planteas por tanto no se debería producir con un buen diseño de la base de datos.


Sql no tiene funciones semanticas, es decir aquellas capaces de comparar texto por su significado, que seria el caso de peluqueria/peluquerias llegar a al conclusión de son lo mismo.

Se podría solucionar si TODOS los plurales se construyeran de la misma forma (agregando una s al final) pero como no es el caso la cosa se complica.

Yo te aconsejaria que hagas la siguiente operacion de reestructuracion de la base de datos

Creas una tabla actividades con el id auto inc.

INSERT INTO actividades (nombre) VALUES SELECT DISTINCT actividad FROM tutabla ORDER BY actividad;

Ahi tienes una lista de las diferentes variedades de cada nombre...con su id. Elimina los errores y usa los id....

Luego tanto las busquedas como la introducción de los datos se debe hacer eligiendo un elemento de esta nueva tabla....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 11/07/2013, 08:26
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta para que encuentre tambien en singular

Hola franjgg:

Lo que puedes hacer es simplemente verificar antes de lanzar la consulta, si tu parámetro $s contiene una s al final... si es el caso, entonces ELIMINAR ESA S, de tal manera que para el ejemplo que pones, si el usuario busca PELUQUERIAS, la consulta busque PELUQUERIA... de esta manera encontrará la palabra, tanto si está en plural o en singular.

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla1;
  2. +-------------+
  3. | descripcion |
  4. +-------------+
  5. | peluqueria  |
  6. | peluquerias |
  7. +-------------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> SELECT * FROM tabla1 WHERE descripcion LIKE 'peluquerias%';
  11. +-------------+
  12. | descripcion |
  13. +-------------+
  14. | peluquerias |
  15. +-------------+
  16. 1 row in set (0.00 sec)
  17.  
  18. mysql> SELECT * FROM tabla1 WHERE descripcion LIKE 'peluqueria%';
  19. +-------------+
  20. | descripcion |
  21. +-------------+
  22. | peluqueria  |
  23. | peluquerias |
  24. +-------------+
  25. 2 rows in set (0.04 sec)

En este foro está prohibido el poner código de cualquier lenguaje de programación, pero la lógica sería así:

Código:
SI el último caracter del parámetro $s es una letra 's' ENTONCES
   $s = $s eliminando el último caracter

SELECT * FROM empresas_direcciones WHERE nombre LIKE '".$s."%'"
Saludos
Leo.
  #4 (permalink)  
Antiguo 12/07/2013, 01:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta para que encuentre tambien en singular

Cuidado con esa solución ....

Bar <--- Bares <--- Bar<>Bare

Hospital <--- Hospitales <---- Hospital <> Hospitale

etc.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 12/07/2013, 08:00
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta para que encuentre tambien en singular

Excelente observación!!! No había considerado estos casos

Saludos
Leo.

Etiquetas: encuentre, select, singular
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:36.