Nueva pregunta

Pregunta:

Fecha: 20-10-2017 03:57:37 (En Español)

Como relaciono productos de varias tiendas utilizando el nombre como referencia?[No resuelta]

Buenos dias
Estoy desarrollando una pagina en php y mysql, en la que pretendo comparar los productos de varias tiendas, el inconveniente que tengo es que no estoy encontrando la forma de relacionar los productos de las tiendas ya que cada uno posee una referencia diferente. Pienso que puedo hacer una comparación de los nombres de los productos y agrupar los productos que tengan el nombre con mayor indice de igualdad posible. Hay alguna manera de realizar eso? estuve probando con la funcion like "%$variable%", y similar_text() de php pero nada.

Dejo un ejemplo de los productos de la base de datos
/********/
id nombre nombreMarca idTienda
| 8986 | Samsung Galaxy Ace | Samsung | 1 |
| 8983 | Samsung Galaxy Ace | Samsung | 2 |
| 6048 | Samsung Galaxy Ace | Samsung | 4 |
| 6109 | Samsung Galaxy Ace | Samsung | 6 |
| 9840 | Samsung Galaxy Ace Duos | Samsung | 1 |
| 8905 | Samsung Galaxy Ace Duos | Samsung | 2 |
| 9097 | Samsung Galaxy Ace Duos | Samsung | 3 |
| 765 | Samsung galaxy Ace Duos S6802 ( Black) | Samsung | 2 |
| 766 | Samsung Galaxy Ace Duos S6802 (Chic White) | Samsung | 2 |
| 11880 | Samsung Galaxy Ace NXT | Samsung | 1 |
| 11218 | Samsung Galaxy Ace NXT | Samsung | 3 |
| 323 | Samsung Galaxy Ace Nxt G313H Black | Samsung | 2 |
| 311 | Samsung Galaxy Ace Nxt G313H White | Samsung | 2 |
| 9099 | Samsung Galaxy Ace Plus | Samsung | 1 |
| 1153 | Samsung Galaxy Ace Plus S7500 Dark Blue | Samsung | 2 |

El resultado deveria ser lo siguiente:

Samsung Galaxy Ace ->disponible en 4 tiendas
Samsung Galaxy Ace Duos ->disponible en 3 tiendas
Samsung galaxy Ace Duos S6802 ( Black)
Samsung Galaxy Ace NXT
Samsung Galaxy Ace Nxt G313H Black
Samsung Galaxy Ace Plus
Etiquetas: Base de Datos - MySQL - PHP - PHP Avanzado - PHP PDO Votos: 0 - Respuestas: 4 - Vistas: 10 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 20-10-2017 05:18:45 Hola,
    Nos falta más información.

    Qué motor de BD estás utilizando? Es SQL?
    Si es MySQL utiliza el motor MyISAM y puedes utilizar MATCH... AGAINST o puedes utilizar una función Levenshtein. Si pudieras normalizar tus datos antes te ayudaría muchísimo.

    Saludos
      Votos: 0 - Link respuesta
     
  • Fecha: 21-10-2017 04:11:46 Muchas gracias,
    La mejor opcion fue utilizar el motor MyISAM, en gran parte me funciona con el siguiente codigo:
      $filtromejorprecio = 'samsung galaxy ace Duos';
                              $palabras = explode(" ", $filtromejorprecio);
                              $cadena = implode(" +",$palabras);
                              $cadenaFinal="+$cadena";
    
                              $stmt = $conexion->prepare("SELECT *,MATCH (nombre) AGAINST ('$cadenaFinal' IN BOOLEAN MODE) as relevancia FROM productotest WHERE MATCH (nombre) AGAINST ('$cadenaFinal' IN BOOLEAN MODE)");
                              $stmt->execute();
                              $filamejorprecio=$stmt->fetchAll();
    

    En gran parte funciona, puedo traer los productos que tengan las palabras +samsung +galaxy +ace +duos, pero no funciona si el mismo producto de la otra tienda tiene una variacion en nombre. Pero creo que con esto podre ir avanzando.
    Nose si puedo poner links en el foro, pero dejo la pagina que estoy tomando como guia, realmente aun no pude averiguar como lo hacen para agrupar los productos, pues igual si tienen una grande variación el nombre lo muestran.

    Pagina guia

    estos son los datos que toman para actualizar la base de datos
    Datos que utilizan
    Estaria muy agradecido si alguien me puede indicar mejores opciones de hacer esto.
    Saludos.
      Votos: 0 - Link respuesta
     
  • Fecha: 23-10-2017 06:09:11 Como dice Ernesto, investiga sobre Levenshtein Distance :P   Votos: 0 - Link respuesta
     
  • Fecha: 30-10-2017 08:23:55 Igual y lo que te conviene es utilizar algo diferente.

    Yo utilizaría un índice en Elasticsearch y eso combinado con la base de datos me daría el resultado que mencionas.

    Si es posible el primer paso sería normalizar la información lo más que se pueda y ya después hacer las búsquedas.
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com