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

MySQL заявка за намиране на приятели и брой общи приятели

Взаимни приятели могат да бъдат намерени, като се присъедини към нея таблицата friend_links в полето friend_id по следния начин:

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

Но имайте предвид, че това в най-лошия случай е по същество квадратиране броя на редовете в таблицата friend_links и може доста лесно да повдигне вашия сървър, след като имате нетривиален брой редове. По-добър вариант би бил да използвате 2 подзаявки за всеки потребител и след това да присъедините резултатите от тях.

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

Освен това можете да опростите таблицата си с Friend_links, като премахнете сурогатния ключ link_id и просто правим (user_id,friend_id) първичния ключ, тъй като те така или иначе трябва да са уникални.

Редактиране:

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

Също така мисля, че user_id ограниченията могат да бъдат преместени от WHERE клауза в JOIN условия за намаляване на размера на набора от данни, създаден от самостоятелното присъединяване и предотвратяване на използването на подзаявки, както във втория ми пример.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да игнорирате дублиращи се редове при вмъкване

  2. MySQL на Docker - Как да контейнеризирате вашата база данни:Нова бяла книга

  3. SQL урок за първичен ключ – Как да дефинирате първичен ключ в база данни

  4. Вмъкване на списък със стойности не съответства на списъка с колони:1136 Броят на колоните не съвпада с броя на стойностите

  5. как да разрешите Обща грешка:2014 Не може да се изпълняват заявки, докато други небуферирани заявки са активни. използвайки PDO връзка