人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

擬似行番号に関して、様々な事例を検索しましたが、perlスクリプト上でのmysqlコマンドが使えません。
当方が探しました、二つの有力と思われる方法に間違えがあればご指摘くださいませ。>_<
環境:mysql5.1

my $sth = $dbh->prepare("set @n=0;select @n := @n+1 as rownum, name from lnk");
又は、
my $sth = $dbh->prepare("select @rownum := 0 union all select @rownum := @rownum + 1 as rownum, name from lnk");

$sth -> execute();
while(my @ary = $sth->fetchrow){
@ary は空です。
}
@ary は空です。

ほしい結果はこんな感じです。
擬似番号 名前
1 山田
2 渡辺
3 のり
....
1020 亀田

他の方法で擬似番号をつけるのはわかるのですが、変数を使っての方法がわからずです。。。
やはり、何かが間違っていると思われます。。。
3日間費やしましたが、当方はおバカ過ぎてわからず。。。

問題が解りましたら、どうか、どうか教えてくださいませ。><
何卒、宜しくお願い致します。

●質問者: shiinaringo
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:ALL AS MySQL name Perl
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Mook
●0ポイント

MySQL で確認しただけで Perl で試せていないのすが、

my $sth = $dbh->prepare('SELECT @rownum := 0; SELECT @rownum := @rownum + 1 AS rownum, name FROM lnk');

でどうでしょうか。

http://oshiete1.goo.ne.jp/qa1906552.html?ans_count_asc=20

http://www.kent-web.com/perl/chap3.html


2 ● kn1967
●70ポイント ベストアンサー

最近使っていないので情報が多少古いかもしれませんが

DBIは複数クエリを扱う機能はまだ有していないはずなので

セミコロンで区切って複数のクエリを書いてもエラーとなり

何も返してくれないはずです。


番号振るくらいの事ならばperl側で行ったほうが楽で

効率も良いと思うのですが、どうしてもMySQL側でということであれば

ストアドプロシージャを作成して実現してはいかがでしょうか?

現在環境が無いため適当に書いておりますが、おおむね下記のような感じです。

$sth->do('CREATE PROCEDURE sample1() 
 BEGIN
 set @n=0;
 select @n := @n + 1 as rownum, name from lnk;
 END
');
$sth->do('CALL sample1(@val)');
$sth->do('SELECT @val');
while(my @ary = $sth->fetchrow){
 処理;
}

MySQL :: MySQL 5.1 リファレンスマニュアル :: 17.2.1 CREATE PROCEDUREおよびCREATE FUNCTION 構文

◎質問者からの返答

説明サイトまで紹介して頂き、誠にありがとうございます。

実行に関してはこれからやってみます!

感謝です!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ