• 締切済み

PerlでMYSQLのデータを読む

PerlスクリプトからMySQLのデータを読むわけですが、仮にトータル1万行のデータがある場所で9000行から100行分だけ読み込みたい場合はどのようなコーディングになるのでしょうか?(先頭から読むと効率が悪いかな) 条件は以下の通りです。 Perl:5.005-02 MYSQL:3.22.23b DBI.pm:1.5

  • aeic
  • お礼率10% (60/582)

みんなの回答

  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

limitという命令(?)を使用します。 LIMIT [開始位置,] 取得件数 の様に使用します。 例) select * from mytable where id!=0 LIMIT 8999,100 の様に書きます。 LIMITの開始位置は0始まりの数字で指定するため、 今回の場合「9000行目から」なので「8999」が 開始位置となります。

関連するQ&A

  • perlでmysqlに接続

    初歩的な質問で申し訳ありません。 perlでmysqlに接続できず困っています(OSはWindowsXPです)。 バージョンは下の通りです。 perl : ActivePerl-5.8.8.820-MSWin32-x86-274739 mysql : MySQL Server 5.0 DOSでppmを入力すると「perl package manager」というウィンドウが立ち上がり、「DBD-SQLite」と「DBI」をインストールすることができました。 サンプルコードは下の通りです。 #!C:/usr/local/Perl/bin/perl use DBI; $user = '*****'; $passwd = '*****'; $db = DBI->connect('DBI:mysql:bulletin_board:localhost', $user, $passwd); $sth = $db->prepare("SELECT * FROM data"); $sth->execute; $num_rows = $sth->rows; print "該当 $num_rows 件\n"; for ($i=0; $i<$num_rows; $i++) { @a = $sth->fetchrow_array; print "no=$a[0], title=$a[1] name=$a[2] \n"; } $sth->finish; $db->disconnect; DOSで実行すると C:\Program Files\War-ftpd\FTPRoot\usr\f-taka\cgi-bin>perl sqlTest.cgi install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: C:/usr/local/Perl/site/lib C:/usr/local/Perl/lib .) at (eval 4) line 3. Perhaps the DBD::mysql perl module hasn't been fully installed, or perhaps the capitalisation of 'mysql' isn't right. Available drivers: DBM, ExampleP, File, Gofer, Proxy, SQLite, Sponge. at sqlTest.cgi line 8 というエラーが出ました。原因は何なのでしょうか。 MySQL側で設定することはあるのでしょうか。 アドバイスお願いします。

    • ベストアンサー
    • Perl
  • PerlでMysqlのデータベース、テーブル作成

    はじめまして。 perlからMysqlのデータベースやテーブルを作成したいと思っております。 webを検索してみたのですが、どれもデータベースに接続してから、データの操作(挿入や削除など)をするものばかりで、データベースの作成などが見つかりません。 perlからデータベースの作成などは出来ないのでしょうか?また、出来るのでしたら、どのように書けばいいのでしょうか? 以下は、データベースに接続する場合です。 use DBI; $database="testdata"; $hostname="localhost"; $user = "aaa"; $password = "test"; $dsn="DBI:mysql:database=$database:host=$hostname"; $dbh = DBI->connect($dsn,$user,$password)||die $DBI::error; 宜しくお願いします。

  • php+MySQLしか使えないレンタルサーバーでPerlを使う方法は?

    先日レンタルサーバーを借りましたが、 php+MySQLしか使えないレンタルサーバーだと いうことが後で発覚しました。 使おうとしていたのはPerl(CGI)なので、困っております。 DBI.pmはインストールされていないという事で、 自分のディレクトリのどこかに置いてやるという ワザがあるようなのですが、どなたかご存じないでしょうか? どうぞ宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • mysqlのデータをperlで読み込んで????を表示される

    過去にもあった質問なのですが、アドバイスお願いします。 perlからmysqlにアクセスしてデータを読み込むと日本語が「??????」と表示されます。 バージョンは下の通りです。 perl:ActivePerl-5.8.8.820-MSWin32-x86-274739 mysql:5.0 OS:windowsXP mysqlの文字コードはstatusで確かめました。 mysql> status; -------------- mysql Ver 14.12 Distrib 5.0.27, for Win32 (ia32) Connection id: 74 Current database: Current user: ******@localhost SSL: Not in use Using delimiter: ; Server version: 5.0.27-community-nt Protocol version: 10 Connection: localhost via TCP/IP Server characterset: sjis Db characterset: sjis Client characterset: sjis Conn. characterset: sjis TCP port: 3306 Uptime: 3 hours 39 min 2 sec Threads: 1 Questions: 232 Slow queries: 0 Opens: 26 Flush tables: 1 Open ta bles: 0 Queries per second avg: 0.018 -------------- mysql> SELECT * FROM table1 と打てば、日本語は表示されます。 perlのコードのコードを書きます。 #!C:/usr/local/Perl/bin/perl print "Content-type: text/html;charset=Shift_JIS\n\n"; use DBI; $user = '***'; $passwd = '***'; $sql="SELECT * FROM categ"; ----略(HTMLタグ)------ $db = DBI->connect('DBI:mysql:board:localhost', $user, $passwd); $sth = $db->prepare($sql); $sth->execute; $num_rows = $sth->rows; $categ_num=$num_rows; for ($i=0; $i<$num_rows; $i++) { @a = $sth->fetchrow_array; print"$a[0] $a[1]<br>"; } $sth->finish; $db->disconnect; ----略(HTMLタグ)------ 結果 0 ????? 1 ????? ブラウザで文字の種類を変えても「?????」のままです。 mysqlのテーブルから取り出した値をjcode.plで変換しても変わらないようです。 &jcode::convert(\$categ[$i], "sjis"); print"<tr><td>no:$i $categ[$i] </td></tr>"; まだ、設定の足りないところがあるのでしょうか。 アドバイスお願いします。

    • ベストアンサー
    • MySQL
  • DBD::Mysql が使用する標準のsocketはどこから得ているか?

    以下のようなスクリプトで、以下のようなエラーになっています。 port(socket)を指定しているにもかかわらず使用されない理由も分からないのですが、エラーメッセージのsocketはどこで設定されているのでしょうか? /etc/my.cnf で /tmp/mysql.sock を指定し、サーバーとクライアントは問題なく通信できています。 よろしくお願いします。 ■perlスクリプト ---------------------------------------- #!/usr/local/bin/perl use DBI; $user = 'usr'; $passwd = 'password'; $ds = 'DBI:mysql:db_name;host=localhost;port=/tmp/mysql.sock'; $db = DBI->connect($ds, $user, $passwd); (以下略) ■perlスクリプトのエラー ---------------------------------------- $ ./script_name.pl DBI connect('db_name;host=localhost;port=/tmp/mysql.sock','root',...) failed: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) at ./script_name.pl line 9 ■環境 ---------------------------------------- mysql:バイナリの(rpmでないやつ)4.0.24-standard OS:Linux 2.4.20-31.9(REDHAT) DBD:DBD-mysql-2.9004

    • ベストアンサー
    • Perl
  • perlでdb(mysql)に接続

    perlでdb(mysql)に接続し、取得したデータを 表示させるというようなことをしたいのですが、うまく いきません。 ファイル名test.cgi mysqlのバージョンは 5.0.45で 記述は以下です。 #!/usr/bin/perl use DBI; my $dbh = DBI->connect("DBI:mysql:database, "userid", "password"); my $sth = $dbh->prepare('SELECT * FROM tablename'); $sth->execute; print "Content-Type: text/plain\n\n"; print "\n"; while(my @row = $sth->fetchrow_array) { print "$row[0]:$row[1]\n"; } $sth->finish(); $dbh->disconnect(); exit; ブラウザで確認すると何も表示されず、ログとして 以下のエラーが確認できます。 DBD::mysql::st execute failed: Table 'database.tablename' doesn't exist at test.cgi line 8. DBD::mysql::st fetchrow_array failed: fetch() without execute() at test.cgi line 11. my $sth = $dbh->prepare('SELECT * FROM tablename'); で指定したテーブルは存在しておりますし、SQL文の記述も 問題ないと思われます。 また、ファイルのパーミッションは705(755でも同様の結果)です。 perl初心者のため、どこが問題なのか検討がつきません。 ご助言いただきたく存じます。 よろしくお願いいたします!

    • ベストアンサー
    • Perl
  • ApachでCGI(Perlスクリプト使用)を動かすときに先頭の#!に関係なく実行できるようにするには。

    ApachでCGI(Perlスクリプト使用)を動かすときに先頭の#!のPerlを動かす場所(?)を指定する行が無かった場合や、違う場合でも、Apachが勝手にperlの場所を解釈しスクリプトを実行してくれるようになるhttpd.confの設定方法ってありますか?

    • ベストアンサー
    • CGI
  • perlのDBIモジュールからmysqlへデータを送ったら文字化けします。

    こんにちは。 タイトル通り、perlのDBIモジュールからデータベース(mysql)にデータを渡してみたのですが(INSERT INTOです。)phpmyadminというDB管理ツールでテーブルの内容を見てみると、文字化けしてました。 フォームより受け取った値(文字列です。もっというと名前)をCGIでデータベースへ追加するといったことをしています。ソースは以下のとうりです。 require 'cgi-lib.pl'; my %formin; &ReadParse(\%formin); $sei=$formin{'sei'}; $mei=$formin{'mei'}; あとはこの変数をDBIでデータベースに渡すだけなので略します。 データベースへデータを渡したとき、文字化けさせないためには、どうしたらいいのでしょうか? 初歩的なことかもしれませんが、どうかお力を貸してください。お願いします。

    • ベストアンサー
    • MySQL
  • Perl+DBI+Apacheの動作

    #!C:\\Perl\\bin\\MSWin32-x86-object\\jperl use DBI; print \"Content-type:text/html\\n\\n\"; print \"<html><body>test script</body></html>\\n\"; という内容のスクリプトを指定したフォルダの中に入れても、「test script]とブラウザ上に表示されません。そのまま「#!C:\\Perl\\bin\\MSWin32-x86-object\\jperl use DBI; print \"Content-type:text/html\\n\\n\"; print \"test script\\n\";」と 表示されます。 Apache、ActivePerl、Mysql、DBI、DBDはインストールし、Apacheも動作しているのは確認できます。 どうしてなのでしょうか。解決方法を教えていただけると助かります。どうぞよろしくお願いします。

    • ベストアンサー
    • Perl
  • MySQL のプロンプトをグラブなりトラップなりしたい

    Perl スクリプトからシェル コマンドなどを発行しています。 まずは、MySQL へパスワードつきでログインするコマンドを発行します。 これは難なくうまくいきました。 これに連続して MySQL のコマンドなりクエリなどを発行するように記述すると、(Perl のエラではないため) スクリプトは無事に完結するものの、コマンド (あるいはクエリ) が効いていません (コンソールから確認済み)。 ところが、スクリプトのほうでログインとクエリとの間に無理矢理に数秒の時間を作ると、その後に来るクエリが成功しています (コンソールから確認済み)。 MySQL どころか RDBMS ではありませんが、ウェブで検索したところ、プロンプトを待たずとも連続してコマンドを発行 (例では print でやっていました) すればよい、みたく書かれていました。実際は、上記のように私の MySQL のプロンプトの例ではうまくいきませんでした。3 秒くらい待てば十分なのですが、200/1,000 秒くらいの間隔で MySQL のプロンプトをグラブできるか否か、同一スクリプトの中から確認する方法はないでしょうか。 (DBI などは無関係の質問です)