2013-09-30 2 views
1

Я стараюсь следить за этой нитью SQL Limit results per column value, чтобы показывать только топ-10 на каждую ветку по количеству, но у меня возникли проблемы с написанием запроса в Perl.mysql query имеет другой результат, выполненный в perl и mysql

Если я запустил запрос в MYSQL Front, он отображает топ-10 на каждую ветвь на основе суммы. Но когда я помещаю запрос в Perl с модулем DBI, он выводит все строки. Что-то не так в моем Perl Script?

Запрос Mysql:

select name, branch, amount from (select name, branch, amount, if(@mainbranch = branch, @num := @num + 1, (@num := 0 || @mainbranch := branch)) as num from branch_amount where branch in (102, 106, 0) order by branch, amount desc) a where num<=10 

Perl-скрипт:

use DBI; 
my $db=DBI->connect("DBI:mysql:$database;host=$host;user=$user;password=$passwd") 
my $query = "select name, branch, amount from (select name, branch, amount, if(\@mainbranch = branch, \@num := \@num + 1, (\@num := 0 || \@mainbranch := branch)) as num from branch_amount where branch in (102, 106, 0) order by branch, amount desc) a where num<=10"; 
$db->prepare("$query"); 
$sth->execute() or die "$query"; 

попытке вычислить результат с Perl Script, а значение поля Num равен 1 для всех строк. Я предлагаю, чтобы операция внутри if не работала, но я не знаю, почему и как. Вся помощь будет оценена

ответ

2

Делает это перед вашей помощью по подготовке?

$db->do('set @num=-1'); 
$db->do('set @mainbranch=-1'); 
+0

Thanks ysth. Он отлично работает! – user2020692

Смежные вопросы