1

このスレッドSQL Limit results per column valueに従って、金額に基づいてブランチごとにトップ 10 のみを表示しようとしましたが、Perl でクエリを作成するのに問題があります。

MYSQL Front でクエリを実行すると、金額に基づいてブランチごとにトップ 10 になります。しかし、DBI モジュールを使用して Perl でクエリを実行すると、すべての行が返されます。Perl スクリプトに何か問題がありますか?

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 スクリプトから結果を計算しようとしましたが、num フィールドの値はすべての行で 1 です。if 内の操作が機能しないことをお勧めしますが、その理由と方法はわかりません。すべての助けをいただければ幸いです

4

1 に答える 1

2

あなたの準備の前にこれを置くことは助けになりますか?

$db->do('set @num=-1');
$db->do('set @mainbranch=-1');
于 2013-09-30T03:44:13.613 に答える