プログラム素人です。
初心者なのでこんなテーブルを思いつくのですが、これってカラムをいちいち作らないといけないので後のメンテが大変な気がします
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で質問しましょう!
似たような質問が見つかりました
- MySQL MYSQL エラー 2 2022/10/18 11:37
- MySQL 何にかが違うから エラーなんでしょうね! 2 2022/09/18 05:28
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php エラー 2 2022/10/23 16:43
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
一つ前のレコードの値と減算し...
-
selectした大量データをinsert...
-
副問合せの書き方について
-
Yahoo .comの idには年齢制限、...
-
エクセルで最後の文字だけ置き...
-
マイクラPC版のコマンドで効率...
-
期間の重複を調べるSQL文につい...
-
SQL Left Join で重複を排除す...
-
同じサーバーで、異なるデータ...
-
SQLについての質問
-
貝を買って中から死にかけのカ...
-
EXPLAINのtypeがALLのときの対...
-
エラー 1068 (42000): 複数の主...
-
SQLにて特定の文字を除いた検索...
-
Mysqlでunionを使った検索速度...
-
ストアドのエラーについて
-
sqlite結果の非表示
-
インスタの名前でかっこいいと...
-
MYSQL PERL からの抽出について
-
mysqlで特定のカラムから下4桁...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
SQLサーバから、項目の属性(型...
-
副問合せの書き方について
-
VIEWの元のテーブルのindexって...
-
エクセルの関数について教えて...
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
select文のwhere句に配列を入れ...
-
sqlで、600行あるテーブルを100...
-
ある条件の最大値+1を初番する...
-
inner joinをすると数がおかし...
-
Unionした最後にGROUP BYを追加...
-
期間の重複を調べるSQL文につい...
-
クエリ表示と、ADOで抽出したレ...
-
Access パラメータクエリをcsv...
-
PL/SQLの変数について
-
MySQLのDATE型カラム値がNULLの...
-
php+mysqlで複数選択削除について
-
上位3位を求めるSQL文は?
おすすめ情報