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

[SOLUCIONADO] Traducir a MySQL

Estas en el tema de Traducir a MySQL en el foro de Mysql en Foros del Web. Hola, necesito hacer una consulta, pero no tengo idea de como hacerla: Supongamos que tengo una tabla llamada tabla , con los campos id y ...
  #1 (permalink)  
Antiguo 20/04/2014, 18:44
 
Fecha de Ingreso: abril-2014
Mensajes: 72
Antigüedad: 10 años
Puntos: 5
Traducir a MySQL

Hola, necesito hacer una consulta, pero no tengo idea de como hacerla:

Supongamos que tengo una tabla llamada tabla, con los campos id y frase y tengo las siguientes entradas:

id| frase
1 | Que lindo es el amor
2 | amo el amor
3 | amor con amor se paga
4 | Muere vieja pendeja!!
5 | Amor, amor amor y mas amor
6 | ya saben... algo con el amor

Bueno... quiero que al buscar la palabra "amor" me devuelva los valores

id| cant
1 | 1
2 | 1
3 | 2
4 | 0
5 | 4
6 | 1

Obsevación: En el ID 4 debería devolver 0 (cero) no ser sencillamente ignorado (aunque si solo saben hacerlo ignorándolo, no es que haya mucho problema, lo arreglo en PHP y listo).

Gracias anticipadas.

Última edición por zyxer; 20/04/2014 a las 18:49
  #2 (permalink)  
Antiguo 20/04/2014, 19:19
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: Traducir a MySQL

No hay una consulta en MySQL o SQL que pueda devolverte ese valor.
Básicamente hay que iterar cada campo para realizar la cuenta, y eso no es funcional en SQL, requeriría algoritmos que carecen de utilidad para las metas de BBDD. Ese tipo de desarrollos se hacen usualmente en programación, pero no son eficientes en las consultas a la base. Es medio largo explciar por qué.
DE todos modos, si la idea es obtener una relevancia de un término dentro de una colección de datos, eso es un asunto que ya está resuelto en los índices FULLTEXT. Esa logica está implementada en ellos. Deberías aprovecharla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 20/04/2014, 19:53
 
Fecha de Ingreso: abril-2014
Mensajes: 72
Antigüedad: 10 años
Puntos: 5
Respuesta: Traducir a MySQL

Sí, me atrapaste, era para eso!! XD

Pero era para usarlo solo con las palabras de tres letras o menos, con las que el FULLTEXT (que ya lo uso), no toma en cuenta (o sí?).
  #4 (permalink)  
Antiguo 20/04/2014, 20:00
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: Traducir a MySQL

No las toma en cuenta porque en nivel de coincidencias es demasiado elevado.
Ese tipo de búsquedas termina produciendo un porcentaje de resultados falsos demasiado alto, y con un enorme costo de performance. Por eso no se hace ni se recomienda.
A nivel teórico, puede parecer una buena idea. A nivel productivo, sólo produce datos donde la relación entre resultados útiles y los inútiles supera el 50% de inútiles.

Una regla sobre la que trabajan todos los motores es que si una búsqueda llega al 50 de los registros existentes en el índice, se descarta el índice y se lee la tabla entera.
Ten en cuenta eso.

Si quieres hacer la prueba, puedes reconfigurar la longitud de la cadena que el FULLTEXT indexa, pero tendrás serios problemas de performance en el mediano plazo, tanto en los INSERT/UPDATE/DELETE, como en el SELECT.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 20/04/2014, 22:55
 
Fecha de Ingreso: abril-2014
Mensajes: 72
Antigüedad: 10 años
Puntos: 5
Respuesta: Traducir a MySQL

Entiendo... realmente me convence lo del 50% y es algo que no recordaba, pero ya lo había leído en algún lugar...

Entonces una última pregunta... habrá alguna consulta que pueda hacer (desde el administrador) que me diga si alguna palabra supera el 50% (y por supuesto, cual es esa palabra...)?
  #6 (permalink)  
Antiguo 21/04/2014, 04:14
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: Traducir a MySQL

Cita:
Entonces una última pregunta... habrá alguna consulta que pueda hacer (desde el administrador) que me diga si alguna palabra supera el 50% (y por supuesto, cual es esa palabra...)?
No. Se trata de algoritmos internos de los DBMS. No hay funcionalidades para que te aporten eso, aunque en algunos casos se pueden inferir con el plan de consulta. Este se obtiene en MySQL a partir del comando EXPLAIN, pero requiere un poco de práctica y consultar al manual para entenderlo bien.
Ayuda mucho a resolver cosas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 21/04/2014, 09:33
 
Fecha de Ingreso: abril-2014
Mensajes: 72
Antigüedad: 10 años
Puntos: 5
Respuesta: Traducir a MySQL

Ok, gracias, con eso puedo trabajar.

Etiquetas: campo, php, tabla, traducir
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 21:58.