質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

Q&A

解決済

3回答

1221閲覧

Mysqlより複数のレコードデータを二次元配列でまとめて取得する方法

mitsu326

総合スコア23

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

0グッド

1クリップ

投稿2017/10/12 14:19

編集2017/10/13 02:47

現在Perlを使用してプログラムを作成しております。

今回、Mysqlより複数のレコードの値を取得して、後ほど取得したデータを使いたいので二次元ハッシュへ
キーと値をセットしたいと考えております。
ハッシュとして取得したあと、どのように二次元ハッシュへセットしたら良いのかわかりませんので、
何か良い方法がありましたら教えてください。

今の私では、ループさせて変換する方法しか浮かばず・・・

my $dsn = "DBI:mysql:$dbname:$dbhost:$dbport"; my $dsh = DBI -> connect ( $dsn, $dbuser, $dbpass, { RaiseError => 0 , mysql_enable_utf8 => 1 ,} ); my $sth = $dsh->prepare("SELECT * FROM `tbl_name`"); $sth->execute; my %NiHash; my $i=1; while (my $hash_ref = $sth->fetchrow_hashref) { my %row = %$hash_ref; while (my ($key, $value) = each(%row)) { $NiHash{$i}->{$key} = $value; } $i++; } $dsh->disconnect;

実際は、取得件数は制限をかけます。

また、他にやり方がある時は良い方法を教えてください。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

my $dsn = "DBI:mysql:$dbname:$dbhost:$dbport"; my $dsh = DBI -> connect ( $dsn, $dbuser, $dbpass, { RaiseError => 0 , mysql_enable_utf8 => 1 ,} ); my $sth = $dsh->prepare("SELECT * FROM `tbl_name`"); $sth->execute; my $NiHash_ref = $dsh->selectall_hashref("SELECT * FROM `tbl_name` WHERE `code` = 100001",'code_name'); $dsh->disconnect; # 二次元ハッシュの取り出し **************** my %NiHash = %$NiHash_ref; # 2次元ハッシュの中身を出力 foreach my $list (sort { $NiHash{$a} cmp $NiHash{$b} } keys %NiHash ){ print "<hr>CodeName:$list<br>\n"; foreach(sort keys %{ $NiHash{$list} } ){ print "$_ = $NiHash{$list}->{$_}<br>\n"; } }

説明)
selectall_hashref を使い、code_nameと言うカラム名の値を最初のKeyに設定し二次元配列が作成できました。

投稿2017/10/13 02:57

mitsu326

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

記述の簡略化のために、fetchall_hashrefが利用できるのではないかと思います。

http://perldoc.jp/docs/modules/DBI-1.612/DBI.pod#fetchall_hashref

実装は確認していませんが、やっていることは質問者さんのコードと同じような対応だとは思います。

また、ご質問に記載の例示コードだけの問題とは思いますが、記載されたSQL文字列は閉じられていないようです。
そのため以降の記述が全て赤く表示されています。

投稿2017/10/12 19:53

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mitsu326

2017/10/13 02:49

ご回答頂きましてありがとう御座います。 SQL文も閉じて修正いたしました。 selectall_hashref を使い希望のことが無事できました。 本当にありがとう御座いました。
guest

0

削除:はずしていたので。

投稿2017/10/12 15:24

編集2017/10/12 15:25
Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mitsu326

2017/10/13 02:51

ご回答頂きましてありがとう御座います。 今後とも何かありましたら宜しくお願いします。
Orlofsky

2017/10/13 03:26

削除依頼は拒否されました。お力になれずすみません。 >【teratail】 回答の削除リクエストが却下されました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問