Add method for retrieving triadic closures
This commit is contained in:
		
							parent
							
								
									a2696cf542
								
							
						
					
					
						commit
						017350e0ea
					
				
					 1 changed files with 19 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -193,6 +193,25 @@ class Account < ApplicationRecord
 | 
			
		|||
      nil
 | 
			
		||||
    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)
 | 
			
		||||
      follow_mapping(Follow.where(target_account_id: target_account_ids, account_id: account_id), :target_account_id)
 | 
			
		||||
    end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue