• 締切済み

今、登録したデータをSQLから取り出して表示するには

はじめまして投稿さしていただきます。 まず環境は Perl+「DBI1.201」「DBD-Pg1.01」「PostgreSQL7.1.1」 です。  いきなり質問なんですけど、 address(テーブル名) --------------------------------------------- id | name | kana | postnumber --------------------------------------------- 1 |  太郎  | たろう | 123-0001 --------------------------------------------- 2 | 花子  | はなこ | 234-0001 --------------------------------------------- このようなテーブルがあったとして、 HTMLファイルで入力画面を作り、そのデータを 下のCGIプログラムに送りました。 $id = $in{'id'}; $name = $in{'name'}; $kana = $in{'kana'}"; $postnumber = $in{'postnumber'}; insert into address(id,name,kana,postnumber) values ($id,'$name','$kana','$postnumber'); で、データをテーブルに入れる事は出来きたんですけど 、この受け取ったCGIの同じプログラムの中に、 入れたデータを、ちゃんと入ったかどうか確認できるよう にSQLから引き出したいんですが、どのようにすれば いいのか教えてもらえますか? $idで、データを指定してselect文で取り出せばいいと 思うんですが、その構文が分からないんです。 また他にいい方法があれば教えてもらえますか? お願いします。

みんなの回答

  • noopee
  • ベストアンサー率38% (114/297)
回答No.1

こんにちは。 データの抽出にはSelectを使います。 idからデータを取り出したいときには、 select *(特定のデータを出したいときにはそのカラム名) from address(テーブル名) where id = $id; のように記述します。 ちょっと調べればすぐわかるようなことですが...。 >また他にいい方法があれば教えてもらえますか? ということですが、どのような状況でDBを使用するかによって変わってきます。 cgiの中でというなら、上記構文をCgi中で実行させたものをということになりますし、ローカルでAccessなどから参照したい場合はODBCで接続しAccessのクエリー等で抽出することになります。

postit
質問者

お礼

早速返答してもらってありがとうございます。 返答みてやっと出来るようになりました。

関連するQ&A

  • 一覧の表示で名前をデータ数を表示したいのですが…

    お世話になります。 度々申し訳ないのですが、質問させてください。 現在mysqlに格納したデータの一覧を表示するページを作っているのですが、表示結果が思うようにいかず困っています。 環境:Mysql 5.1.22-rc,PHP  5.2.5 データベース:test01 main -------------------------------------------------------- id name kana 1 太郎 たろう 2 次郎 じろう 3 花子 はなこ -------------------------------------------------------- sub2 -------------------------------------------------------- id a_sakuhin   title 1 data_1   青空   1 data_2   夕日 1 data_3   流星   3 data_1   町並み 3 data_2   列車   -------------------------------------------------------- というテーブルがあります。 それを一覧表示で ・太郎 (3) ・次郎 (0) ・花子 (2) という具合にしたいのですが、どうしても()の中が全件合わせた結果になり ・太郎 (50) ・次郎 (50) ・花子 (50) という様になってしまうのです。 どういったsql文を書けばよいのかアドバイスを頂けると嬉しいです。 よろしくお願いいたします。

  • データベースの設計について

    現在PostgreSQL(ver 8.4)を使ってちょっとしたシステムの構築を計画していますが、データベースの設計に関して広くアドバイスを頂きたいです。 ユーザーの入力データをDBで効率よく管理したいと考えています。 例えば、次のようなテーブルを作るとします。 userテーブル id | name ---+------------- 1 | 山田太郎 2 | 高橋次郎 .. | ............. .. | ............. emailテーブル id | address ---+------------------------------ 1 | yamada@mail.com 2 | takahashi@mail.com .. | ................................. .. | ................................. この様な複数のテーブルにユーザーの入力を受け、1対1に対応するIDを振って名前やアドレスなどのデータをリアルタイムで挿入していく場合、どのようなテーブルを用意し、プログラムを組むのが適切なのでしょうか? 具体的には、PerlでCGIをつくり、ブラウザ上などからユーザーの入力したデータを取得してPostgreSQLに次々挿入していく形にしようとしています。 具体的なPerlのコードを書いていただけると助かるのですが、他の言語のコードでも一向に構いません。 今のところ、自分で考えたものとしては、 create table user( id serial, name text); create table email( id serial, address text); とテーブルを用意し、 Perlコードの概要は use DBI; # *実際にはユーザーの入力値から値を得る $input_user = 'name_hogehoge'; $input_email = 'address_hogehoge@mail.com'; # DBとの接続 $dbh = DBI->connect("dbi:Pg:dbname=hogehoge", ......); # プレースホルダの準備 $sth_user = $dbh->prepare("INSERT INTO user (name) VALUES(?)"); $sth_email = $dbh->prepare("INSERT INTO email (address) VALUES(?)"); # SQLの実行 $sth_user->execute("$input_user"); $sth_email->execute("$input_email"); # コミット $dbh->commit; といった感じで考えていました。しかしidの対応が確実に取れるかなど不安な点がありますので、アドバイスいただけたらと思います。 もちろんこの方法に固執する必要はなく、結果的に同じようなテーブルが得られれば問題ないです。 長々と失礼致しました。

  • SQLで別テーブルの参照

    こんにちは。 PostgreSQL+Perl+DBIでCGIを書いています。 テーブルからデータを取得する場合なのですが、table1にはIDのみが登録されていて、table2には、そのIDに対する文字列が登録されているとします。 このような場合に、tableからIDを取得して、そのIDに対するtable2の文字列を一気に取得することは可能でしょうか? つまり、 $dbh=DBI->connect(~); $sth=$dbi->prerare("SELECT id FROM table1 WHERE ~;"); $sth->excecute(); $id=$sth->fetchrow; $sth->finish(); $sth=$dbi->prerare("SELECT str FROM table2 WHERE id=$id;"); $sth->excecute(); $str=$sth->fetchrow; $sth->finish(); $dbh->disconnect(); といった処理をこんな感じに一度に行いたいのです。 $dbh=DBI->connect(~); $sth=$dbi->prerare("~~~~~;"); $sth->excecute(); $str=$sth->fetchrow; $sth->finish(); $dbh->disconnect(); 可能かどうかもわからないのですが、なにか良い方法はありますでしょうか?よろしくお願いします。

  • [ASP+SQL]データ長の調べ方。

    こんばんわ。 まず、ASPとSQLでWebプログラムを書いています。 あるテーブルの列名を配列何かに取り込みには・・・ For each fld in rsSyohinMaster.Fields  と fld.Name  でうまいこととれます・・・。 データ長を採るには・・・ fld.???????     ↑何にすればいいのでしょうか?? 宜しくお願い致します。

  • SQLを使ったデータの作成

    コマンドプロントを使用し、SQLでデータベースを作成しています。 大きなテーブルを複数作り、複数のデータの作成をしています。 1.テーブルの方の定義を行い、キー項目を決める。 2.データは、一つ一つの項目ごとに、データの型やサイズを決める。 3.いくつか検索をした際に、ちゃんと結果の違いが確認できるように、100レコード程度のデータを作成する。 の制約で制作しています。 SQLに触って、まだあまり経っていないためどうプログラムを組めばいいのか分かりません。    テーブルの意味などや、キー項目、などの言葉の意味もあまり理解出来てません。 例えば データベース:ONLAINGAME テーブル1:MEMBER テーブル2:WEAPON を制作し、MENBERの中に50件、WEAPONの中に50件データを作ればいいのでしょうか。 データの作り方も少し心配です。 create table MENBERl(age int, name varchar(20) , primary key (aa); 上記の文を打ち、insert into MENBER ( age, name) values(20, 'takasi'); と書けば、制約通りデータが格納できるのでしょうか? 分かりずらいとは思いますが、詳しいお答えお願いいたします。

  • データの加工方法(SQL)について

    「TABLE1」から「TABLE2」というテーブルを作成したいと考えております。 TABLE1ではNAMEという項目がキーとなってデータが入っていました。 それをIDという項目をキーとした形にデータ加工したいと考えています。 各IDにおけるNAMEの数はMAXでも5個までとなります。 何か良い方法は有りますでしょうか? SQLのSELECT文で行う事を考えていますが、方法がわかりませんでした。 (EXCELなどで他に容易な方法があれば他の方法でもかまいません) よろしくお願いいたします。 ■TABLE1 ------------- ID NAME ------------- 1000 AAA 1000 BBB 1000 CCC 1000 DDD 1001 EEE 1001 FFF ------------- ■TABLE2 ---------------------------------------------- ID NAME1 NAME2 NAME3 NAME4 NAME5 ---------------------------------------------- 1000 AAA BBB CCC DDD 1001 EEE FFF ----------------------------------------------

  • perl初心者なのですが

    use strict; use CGI; use DBI; my $dbh = DBI->connect("dbi:ODBC:DB_test"); my $NAME1 = CGI->new(); my $ADDRESS1 = CGI->new(); my $LETTER_NUM1 = CGI->new(); my $TEL_NUM1 = CGI->new(); my $NAME = $NAME1->param('name'); my $ADDRESS = $ADDRESS1->param('address'); my $LETTER_NUM = $LETTER_NUM1->param('letter_num'); my $TELL_NUM = $TEL_NUM1->param('tell_num'); my $sth = $dbh->prepare("INSERT INTO table1(name1,address1,letter_num1,tell_num1) values(?,?,?,?)"); $sth->execute($NAME,$ADDRESS,$LETTER_NUM,$TELL_NUM); $sth->finish; $dbh->disconnect; フォームから受け取ったデータをデータベースに格納したいのですが、うまくいきません。誰か教えてください。

  • データ登録時、重複エラーを避けたい

    MYSQLのデータベースの、IDという項目が主キーのTESTというテーブルに、データをに登録する際、 既に主キーが同じデータがない場合に、という条件をつけたいのですが、 下のように書くと、エラーになってしまいます。 INSERT INTO TEST (ID, NAME) VALUES ('a', 'abc') WHERE NOT EXISTS (SELECT * FROM TEST WHERE ID = 'a'); どうしたらよいか教えてください。

    • ベストアンサー
    • MySQL
  • SQLでのデータ検索方法

    以下のようにデータが格納されている テーブルAがすでにあります。  id  in_time  out_time  1         11:10  1   10:30  1         10:15  3   09:50  1   09:30  1         09:00  1   08:30  2         08:10  1         07:50  2   07:40  1   07:30 ここでin_timeとout_timeの範囲が指定されたとき 範囲内でidごとにin_timeとout_timeがセットにな っているデータのみ抽出したいのです。 例えば in_time:7:00~10:20 out_time:8:00~11:30 と指定されたとき、検索結果を  id  in_time  out_time  1         10:15  1   09:30  1         09:00  1   08:30  2         08:10  2   07:40 と表示したいのです。 プログラムで1レコードずつ処理するしかない と思っているのですが、SQLで上記のような結果 を取得する方法はあるのでしょうか。 環境は、 RHEL 5 postgesql 8.1.9 です。

  • PerlでSQLiteのデータテーブルを作成し

    PerlでSQLiteのデータテーブルを作成し、作成したテーブルへデータを追加するようにしたいのですが、 下記のように作成し、実行すると、 テーブルの作成のみ、もしくは、既存のテーブルへのデータの追加のみは可能なのですが、 両方処理させると、テーブルの作成のみされて、作成されたテーブルの中身はカラのままです。 #データベースに接続 $dbh = DBI->connect("dbi:SQLite:dbname=c:\\database\\tyumon.db"); open (DATA,"c.dat"); $data = <DATA>; close(DATA); $data = $data+1; $table = "user"; $table .= $data; #テーブル作成実行 $hst = $dbh->do("CREATE TABLE '$table'(name text,area text,tel text,mail text,jikan text, hoka text)"); #レコードの追加(INSERT文の実行) $st = $dbh->do("insert into '$table' values('$data','$name','$area','$tel','$mail','$jikan','$hoka')"); 「c.dat」には、カウントされた数字が入っています。 テーブル名は「user」+カウント数字で作成しています。 データベースと、CGIの勉強を兼ねて作成しているもので、 根本的な間違いなどあるかもしれません。 どなたか、ご指摘いただければ幸いです。

    • ベストアンサー
    • CGI