sql >> Database teknologi >  >> RDS >> Mysql

Sammenlign ligheder mellem to resultatsæt

Noget som dette:

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

Bemærk, at dette ikke er særlig effektivt. En måde at omgå dette på er at lave en 'cache-tabel', der indeholder outputtet fra denne forespørgsel med LIMIT 1 del fjernet. Tilføj nogle relevante indekser og forespørg denne cache-tabel. Du kan indstille et cron-job til at opdatere denne tabel med jævne mellemrum.

Eksempel:

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. Django modellerer en fremmednøgle til mange borde

  2. Er mysql_insert_id sikkert at bruge?

  3. Python, Ruby og Golang:A Web Service Application Comparison

  4. Sådan skjuler du resultatsæt-dekoration i Psql-output