Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

SQL- Memilih produk yang paling mirip

Coba ini

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

query di atas dapatkan closest matches untuk semua produk, Anda dapat menyertakan product_id di kueri terdalam, untuk mendapatkan hasil untuk product_id tertentu , saya telah menggunakan LEFT JOIN sehingga meskipun product tidak ada yang cocok, yang ditampilkan

SQLFIDDLE

Semoga membantu



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana Membandingkan Kinerja Moodle

  2. Cara menghindari pengecualian PDO ini:Tidak dapat menjalankan kueri saat kueri tanpa buffer lainnya aktif

  3. Periksa bahasa string berdasarkan mesin terbang di PHP

  4. Bagaimana cara membagi string catatan yang dipisahkan koma dan mengaturnya secara berurutan di MySQL?

  5. bagaimana saya bisa mengekspor database mysql menggunakan ssh?