Mysql
 sql >> база данни >  >> RDS >> Mysql

Сравнете приликите между два набора от резултати

Нещо като това:

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

Имайте предвид, че това не е много ефективно. Един от начините да заобиколите това е да направите „кеш таблица“, съдържаща изхода на тази заявка с LIMIT 1 отстранена част. Добавете някои подходящи индекси и направете заявка към тази кеш таблица. Можете да зададете задание на cron да актуализира периодично тази таблица.

Пример:

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. Изпълнете MySQL INSERT Query няколко пъти (вмъкнете стойности в множество таблици)

  2. Не мога да стартирам bundler, продължава да получава грешка

  3. Изпълнение на .sql скрипт с помощта на MySQL с JDBC

  4. Задайте повторно разрешение за достъп до хост на потребителя на MySQL

  5. Седмица от годината за седмици, започващи от събота