MySQL - Datos similares en misma tabla

 
Vista:
Imágen de perfil de Lina
Val: 10
Ha aumentado su posición en 9 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Datos similares en misma tabla

Publicado por Lina (5 intervenciones) el 11/05/2017 19:38:00
Hola mucha@s,

Les comento mi problema:

Tengo una tabla con esta columna, lo que quiero hacer es una consulta que me traiga los datos SIMILARES en esta columna.
como se ve en la imagen los datos NO son iguales pero tiene palabras similares...

Lo que en googleado solo me sale la misma forma de hacerlo con un group by y un having count, pero esto solo compara cuando los datos son iguales..

¿Quisiera saber si hay alguna forma de hacerlo desde mysql o me tocaria hacerlo en php

Gracias
ejemplo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Datos similares en misma tabla

Publicado por leonardo_josue (414 intervenciones) el 16/05/2017 22:49:32
Hola Lina:

Lo que pretendes hacer es harto complicado y en realidad no hay una "mejor" forma de hacerlo... en realidad lo que hay es una serie de técnicas que te pueden ayudar a hacer lo que quieres y que están relacionadas con un concepto que se llama Limpieza de datos (data cleaning en inglés).

en el mercado hay incluso muchas herramientas que te ayuda a hacer esto pero por lo general son de paga, igual y podrías preguntarle primero a San Google para ver si alguna te sirve...

Ahora bien, si forzosamente tienes que hacerlo por tu cuenta, insisto que no hay una mejor o peor forma, pero puedes tratar de hacer algo así:

1. Agrupar sólo por una palabra, por ejemplo, la primera de:

1
2
3
4
5
6
7
8
9
10
mysql> SELECT SUBSTRING_INDEX(descripcion, ' ', 1), COUNT(1)
    -> FROM tabla
    -> GROUP BY 1;
+--------------------------------------+----------+
| SUBSTRING_INDEX(descripcion, ' ', 1) | COUNT(1) |
+--------------------------------------+----------+
| LIBERTY                              |        2 |
| SEGUROS                              |        2 |
+--------------------------------------+----------+
2 rows in set (0.07 sec)

Otra sería hacer búsquedas tipo LIKE y hacer productos cartesianos, por ejemplo, algo así;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql> SELECT T1.id, T1.descripcion, T2.id, T2.descripcion
    -> FROM
    ->   tabla T1
    -> INNER JOIN tabla T2 ON
    ->   t2.`descripcion` LIKE CONCAT('%', SUBSTRING_INDEX(T1.`descripcion`, ' ', 1), '%')
    ->   AND T1.`id` != T2.`id`;
+------+--------------------------------------+------+--------------------------------------+
| id   | descripcion                          | id   | descripcion            |
+------+--------------------------------------+------+--------------------------------------+
|    2 | LIBERTY SEGUROS S.A.                 |    1 | LIBERTY SEGUROS DE VIDA S.A. DE C.V. |
|    3 | SEGUROS LIBERTY S.A.                 |    1 | LIBERTY SEGUROS DE VIDA S.A. DE C.V. |
|    4 | SEGUROS LIBERTAD S.A.                |    1 | LIBERTY SEGUROS DE VIDA S.A. DE C.V. |
|    1 | LIBERTY SEGUROS DE VIDA S.A. DE C.V. |    2 | LIBERTY SEGUROS S.A.            |
|    3 | SEGUROS LIBERTY S.A.                 |    2 | LIBERTY SEGUROS S.A.            |
|    4 | SEGUROS LIBERTAD S.A.                |    2 | LIBERTY SEGUROS S.A.            |
|    1 | LIBERTY SEGUROS DE VIDA S.A. DE C.V. |    3 | SEGUROS LIBERTY S.A.            |
|    2 | LIBERTY SEGUROS S.A.                 |    3 | SEGUROS LIBERTY S.A.            |
|    4 | SEGUROS LIBERTAD S.A.                |    3 | SEGUROS LIBERTY S.A.            |
|    3 | SEGUROS LIBERTY S.A.                 |    4 | SEGUROS LIBERTAD S.A.            |
+------+--------------------------------------+------+--------------------------------------+
10 rows in set (0.02 sec)

pero insisto en que esto es muy complicado como para hacerlo con una simple consulta (o una consulta simple, que no es lo mismo).

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar