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

Bandingkan kesamaan antara dua set hasil

Sesuatu seperti ini:

SELECT first_user.id_user, second_user.id_user, COUNT(first_user.id_user) AS total_matches

FROM likes AS first_user

JOIN likes AS second_user
ON second_user.id_artist = first_user.id_artist
AND second_user.id_user != first_user.id_user

GROUP BY first_user.id_user, second_user.id_user

ORDER BY total_matches DESC

LIMIT 1

Perhatikan bahwa ini tidak terlalu efisien. Salah satu cara untuk mengatasinya adalah dengan membuat 'tabel cache' yang berisi output dari kueri ini dengan LIMIT 1 bagian dihapus. Tambahkan beberapa indeks yang relevan dan lakukan kueri tabel cache ini. Anda dapat mengatur tugas cron untuk memperbarui tabel ini secara berkala.

Contoh:

CREATE TABLE IF NOT EXISTS `likes` (
  `id_user` varchar(50) DEFAULT NULL,
  `id_artist` varchar(50) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `likes` (`id_user`, `id_artist`) VALUES ('8', '39'), ('8', '37'), ('4', '37'), ('8', '24'), ('8', '7'), ('4', '28'), ('8', '28'), ('4', '27'), ('4', '11'), ('8', '49'), ('4', '7'), ('4', '40'), ('4', '29'), ('8', '22'), ('4', '29'), ('8', '11'), ('8', '28'), ('4', '7'), ('4', '31'), ('8', '42'), ('8', '25'), ('4', '25'), ('4', '17'), ('4', '32'), ('4', '46'), ('4', '19'), ('8', '34'), ('3', '32'), ('4', '21')

+---------+---------+---------------+
| id_user | id_user | total_matches |
+---------+---------+---------------+
| 8       | 4       |             7 |
+---------+---------+---------------+


  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:Menyimpan PDF ke Database

  2. Periksa apakah nama pengguna sudah ada di database MySQL PHP

  3. Apache - Layanan MySQL terdeteksi dengan jalur yang salah. / Port sudah digunakan

  4. unggah gambar ke database mysql php

  5. Tetapkan SEKARANG () sebagai Nilai Default untuk tipe data datetime?