#!/usr/bin/perl use strict; use DBI; # DB Configurations: my $server = 'DBI:mysql:jmdb:localhost'; my $user = 'USER'; my $pass = 'PASS'; # DB Structure my $table1 = "actors"; my $table1_ID_field = "actorid"; my $table2 = "movies2actors"; my $table2_ID_field = "actorid"; my $table3 = "actor2actor"; my $table3_ID1_field = "actorid1"; my $table3_ID2_field = "actorid2"; my $table3_strength_field = "strength"; my $element_IDindex = 0; my $link_index = 0; # Query configurations my $minStrangh = 0; # Connecting to DB: my $dbh = DBI->connect($server, $user , $pass); # Enable transactions, if possible $dbh->{'AutoCommit'} = 0; $dbh->{'RaiseError'} = 1; # Findi all elemnts in the DB: my $ID; my $ID2; my $movieid; my $key; my $loop_size = 500; # Finding all links related to the given element: my $query = "select movieid from movies2actors where actorid = ?"; my $related_links = $dbh->prepare($query); $query = "select actorid from movies2actors where movieid = ?"; my $movie_actors = $dbh->prepare($query); my $query = "insert into relations VALUES (?,?,?)"; my $partner = $dbh->prepare($query); $ID = 0; while($ID < 1561406 - $loop_size){ eval{ for(my $j = 1; $j <=$loop_size ; $j++) { $related_links->execute($ID); $related_links->bind_columns(\$movieid); my %partners = (); # For each link, finding all other elements (which are partners): while($related_links->fetch()) { $movie_actors->execute($movieid); $movie_actors->bind_columns(\$ID2); while($movie_actors->fetch()) { # excluding the actor itself from the count: if ($ID2 != $ID) { $partners{$ID2}++; } } } my $i = 0; foreach $key (sort {$partners{$b} <=> $partners{$a}} keys %partners) { if($i > 15) { last; } else{ $i++; $partner->execute($ID,$key,$partners{$key}); } } $ID++; } $dbh->commit(); print "$ID \n" ; }; } $dbh->disconnect();