Add method for retrieving triadic closures
parent
a2696cf542
commit
017350e0ea
|
@ -193,6 +193,25 @@ class Account < ApplicationRecord
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def triadic_closures(account, limit = 5)
|
||||||
|
sql = <<SQL
|
||||||
|
WITH first_degree AS (
|
||||||
|
SELECT target_account_id
|
||||||
|
FROM follows
|
||||||
|
WHERE account_id = ?
|
||||||
|
)
|
||||||
|
SELECT accounts.*
|
||||||
|
FROM follows
|
||||||
|
INNER JOIN accounts ON follows.target_account_id = accounts.id
|
||||||
|
WHERE account_id IN (SELECT * FROM first_degree) AND target_account_id NOT IN (SELECT * FROM first_degree) AND target_account_id <> ?
|
||||||
|
GROUP BY target_account_id, accounts.id
|
||||||
|
ORDER BY count(account_id) DESC
|
||||||
|
LIMIT ?
|
||||||
|
SQL
|
||||||
|
|
||||||
|
Account.find_by_sql([sql, account.id, account.id, limit])
|
||||||
|
end
|
||||||
|
|
||||||
def following_map(target_account_ids, account_id)
|
def following_map(target_account_ids, account_id)
|
||||||
follow_mapping(Follow.where(target_account_id: target_account_ids, account_id: account_id), :target_account_id)
|
follow_mapping(Follow.where(target_account_id: target_account_ids, account_id: account_id), :target_account_id)
|
||||||
end
|
end
|
||||||
|
|
Reference in New Issue