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

MySQL Query untuk menemukan teman dan jumlah teman bersama

Rekan teman dapat ditemukan dengan bergabung dengan tabel friend_links ke dirinya sendiri di bidang friend_id seperti:

SELECT *
FROM friend_links f1 INNER JOIN friend_links f2
  ON f1.friend_id = f2.friend_id
WHERE f1.user_id = $person1
  AND f2.user_id = $person2

Namun perlu diingat bahwa ini, dalam kasus terburuknya, pada dasarnya adalah mengkuadratkan jumlah baris dalam tabel friend_links dan dapat dengan mudah mendongkrak server Anda setelah Anda memiliki jumlah baris yang tidak sepele. Opsi yang lebih baik adalah menggunakan 2 sub-kueri untuk setiap pengguna, lalu menggabungkan hasilnya.

SELECT *
FROM (
  SELECT *
  FROM friend_links
  WHERE user_id = $person1
) p1 INNER JOIN (
  SELECT *
  FROM friend_links
  WHERE user_id = $person1
) p2
  ON p1.friend_id = p2.friend_id

Anda juga dapat menyederhanakan tabel friend_links dengan menghapus kunci pengganti link_id dan tinggal buat (user_id,friend_id) kunci utama karena mereka harus unik.

Sunting:

SELECT f2.user_id, COUNT(*) 'friends_in_common'
FROM friend_links f1 LEFT JOIN friend_links f2
  ON f1.friend_id = f2.friend_id
WHERE f1.user_id = $person
GROUP BY f2.user_id
ORDER BY friends_in_common DESC
LIMIT $number

Saya juga berpikir bahwa user_id batasan dapat dipindahkan dari WHERE klausa ke dalam JOIN kondisi untuk mengurangi ukuran kumpulan data yang dibuat oleh self-join dan mencegah penggunaan subkueri seperti pada contoh kedua saya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan uuid yang dihasilkan setelah memasukkan php

  2. MySqli:apakah mungkin membuat database?

  3. Tidak ada entitas Doctrine ORM yang dipetakan menurut konfigurasi saat ini

  4. Bagaimana cara MEMILIH empat item terbaru per kategori?

  5. Cara memutar skema nilai entitas-atribut MySQL