Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

So sánh điểm tương đồng giữa hai tập kết quả

Một cái gì đó như thế này:

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

Lưu ý rằng điều này không hiệu quả lắm. Một cách để giải quyết vấn đề này là tạo 'bảng bộ nhớ cache' chứa kết quả của truy vấn này với LIMIT 1 phần bị loại bỏ. Thêm một số chỉ mục có liên quan và thực hiện truy vấn bảng bộ nhớ cache này. Bạn có thể đặt một công việc cron để cập nhật bảng này theo định kỳ.

Ví dụ:

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. Lỗi kết nối PDO khi sử dụng symfony và MAMP

  2. Làm cách nào để thêm cột mới vào bảng MYSQL?

  3. Có cách nào để lưu vào bộ nhớ cache của một Chế độ xem để các truy vấn đối với nó được nhanh chóng không?

  4. Tìm số cột trong bảng

  5. MySQL chọn hàng ngẫu nhiên với JOIN từ hai bảng