
プログラム素人です。
初心者なのでこんなテーブルを思いつくのですが、これってカラムをいちいち作らないといけないので後のメンテが大変な気がします
CREATE TABLE hoge(
id INT PRIMARY KEY,
item1 VARCHAR(255),
value1 INT,
item2 VARCHAR(255),
value2 INT,
item3 VARCHAR(255),
value3 INT
);
こんな感じのテーブルにどんどんINSERTしていきたいのです
CREATE TABLE hoge(
id INT PRIMARY KEY,
item VARCHAR(255),
value INT
);
聞きたいこと
MYSQL側
IDにPRIMARY KEYが付いているのですが2つ同じPRIMARY KEYはINSERTでききませんよね?どうすればいいでしょうか?
perl側
IDごとにまとめて取得して配列に入れる方法はありますか?
idが1のアイテムを全部取得して配列に入れる方法がわかりません(他にいい方法があったらお願いします)
よろしくお願いします
No.2ベストアンサー
- 回答日時:
なんかidの使い方に強い違和感がありますが、
> IDにPRIMARY KEYが付いているのですが2つ同じPRIMARY KEYはINSERTでききませんよね?どうすればいいでしょうか?
primary keyにしなければよいのでは?
CREATE TABLE hoge(
id INT,
item VARCHAR(255),
value INT
);
> IDごとにまとめて取得して配列に入れる方法はありますか?
whereつきでselect文を発行すれば特定のidのものだけを取得出来ます。
select * from hoge where id = '1';
例えば、こんな感じ?
my $id = 1;
my $rows = $dbh->selectall_arrayref('select * from hoge where id = ?', {Columns=>{id=>undef, item=>undef, value=>undef}}, $id);
prepare、executeのスタイルを取りたいならこういう書き方もありですが。
sub GetRows {
my ($dbh, $id) = @_;
my $sth = $dbh->prepare('select * from hoge where id = ?');
$sth->execute($id);
my @rows = ();
while (my $row = $sth->fetchrow_hashref()) {
push(@rows, $row);
}
$sth->finish;
return \@rows;
}
余談ですが、idというのは普通identityやidentificationの略で、固有の番号を示すのに使われると思うので、それで2つ以上のものが取得できるというのはちょっと違和感があります。idというよりむしろgroup_idなのでは。
groupで共通する内容はgroupのテーブルを作ってそこに入れ、group_idはgroupのテーブルのidを指す外部キーにしそうなものですが。
お答え頂きありがとうございます
>whereつきでselect文を発行すれば特定のidのものだけを取得出来ます。
whereで指定した場合id全部取得できるんですね。1つしかできないと勘違いしていました
>prepare、executeのスタイルを取りたいならこういう書き方もありですが。
すっごい勉強になりました。
>groupのテーブルを作ってそこに入れ、group_idはgroupのテーブルのidを指す外部キーにする
idでやったことをgroup_idでやればいいのでしょうか?この場合idの意味ってありますか?ちなみにidは登録者番号です
CREATE TABLE group(
id INT PRIMARY KEY,
group_id INT,
item VARCHAR(255),
value INT
);
No.3
- 回答日時:
> whereで指定した場合id全部取得できるんですね。
1つしかできないと勘違いしていましたPerlのDBIについての説明にざっと目を通しておくと良いかもしれません。
http://dbi.perl.org/
http://search.cpan.org/~timb/DBI/DBI.pm
また、"Perl DBI"で検索すると様々な方の解説記事を見つけられます。公式ドキュメントを読んでもピンと来ない場合は検索してみましょう。
> idでやったことをgroup_idでやればいいのでしょうか?この場合idの意味ってありますか?ちなみにidは登録者番号です
基本的にそういうことです。ただ、登録者番号ならregistrant_idなどと名付けるのでは。
行ごとに固有の番号が振ってあると、その行のデータを指定して取り扱うときになにかと便利だと思います。普通に考えて、データの複数ページにわたる表示、削除や変更をする場合、idがあったほうが楽ではありませんか。
例えば、Webのフォームなどで登録者IDごとにデータの一覧表示をして、削除するものをそこから選ぶ場合、IDさえフォームから送ってもらえると削除するものが一意に決まり、簡単に削除出来ますよね。また、IDで整列して表示すれば複数ページにわたっる表示が必要な場合に簡単に重複なく次のページを表示できます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
ソフトバンクの無料着うたのお...
-
テーブルが5つの時の結合の仕...
-
WordpressのContact form 7でzi...
-
Postgreのupdateコマンドでエラー
-
select文のwhere句に配列を入れ...
-
PL/SQLの変数について
-
一度のsqlで値を取得するには
-
php+mysqlで複数選択削除について
-
HAVING count()で重複したデー...
-
VMwareがCDドライブを認識する...
-
SQLにて特定の文字を除いた検索...
-
OSPFのDRの選出基準について シ...
-
sqlで、600行あるテーブルを100...
-
MYSQLの論理削除について質問で...
-
【Transact-sql】 execの結果を...
-
エクセルの関数について教えて...
-
android studio
-
MySQLでvarcharに先頭ゼロをセ...
-
Access VBAでのIDの自動発番
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エラー 1068 (42000): 複数の主...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
sqlで、600行あるテーブルを100...
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
クエリ表示と、ADOで抽出したレ...
-
ストアドのエラーについて
-
マイクラPC版のコマンドで効率...
-
バインド変数について
-
SQLにて特定の文字を除いた検索...
-
副問合せの書き方について
-
【Transact-sql】 execの結果を...
-
”photo id” とは何ぞや?
-
mysql+phpをつかったカートつく...
-
MySQL5.5 viewの処理速度改善に...
-
select文のwhere句に配列を入れ...
-
テーブル名を省略して「h.id」...
おすすめ情報