Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL- Wybór najbardziej podobnego produktu

Wypróbuj to

SELECT 
  a_product_id, 
  COALESCE( b_product_id, 'no_matchs_found' ) AS closest_product_match
FROM (
  SELECT 
    *,  
    @row_num := IF(@prev_value=A_product_id,@row_num+1,1) AS row_num,
    @prev_value := a_product_id
  FROM 
    (SELECT @prev_value := 0) r
    JOIN (
        SELECT 
         a.product_id as a_product_id,
         b.product_id as b_product_id,
         count( distinct b.Attributes ),
         count( distinct b2.Attributes ) as total_products
        FROM
          products a
          LEFT JOIN products b ON ( a.Attributes = b.Attributes AND a.product_id <> b.product_id )
          LEFT JOIN products b2 ON ( b2.product_id = b.product_id )
       /*WHERE */
         /*  a.product_id = 3 */
        GROUP BY
         a.product_id,
         b.product_id
        ORDER BY 
          1, 3 desc, 4
  ) t
) t2 
WHERE 
  row_num = 1

Powyższe query pobiera closest matches dla wszystkich produktów możesz dołączyć product_id w najgłębszym zapytaniu, aby uzyskać wyniki dla konkretnego product_id , użyłem LEFT JOIN tak, że nawet jeśli product nie ma dopasowań, jest wyświetlany

SQLFIDDLE

Mam nadzieję, że to pomoże



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP MySQL wielokrotne zapytanie za pomocą opcji / wybierz tagi formularza HTML

  2. Wydrukuj pojedyncze zapytanie SQL (Yii 1.x)

  3. Przesyłanie plików za pomocą jQuery i CodeIgniter (ale bez odświeżania strony)

  4. Homestead — Łączę się z moją bazą danych

  5. Filtrowanie danych MySQL w PHP, aby wyświetlić tylko dane użytkownika bieżącej sesji?