SQL命令について質問です。


現在HTMLとPHPとSQL文を組み合わせてちょっとしたソフトの様なものを開発したいと考えています。

しかしどのような命令文・構文が必要なのか?というのが分かりません。

作成したいソフトの図と流れを作成しました。

http://oskuni7.sakura.ne.jp/question1.html

<< 知りたい命令文 >>

①出品リスト作成ボタンを押した際のダイアログの発生の仕方。 はい を押すと実行に移し、いいえ を押すと実行しない。(PHP)

②グループ名にあったものを照合し抽出。新しいテーブルを作成(SQL)

③新しいテーブルの指定した場所に決められたデータを入れ込む(SQL)

④新しいテーブルをエクセルのCSV形式で出力する(SQL)

上記の命令文についてこういう構文を使用したほうがいいというのがありましたら教えて下さい。

またページに書いてあるモデル例をプログラム作成することが出来るかたおりましたら大目にポイント払わせていただきます。

よろしくお願いいたします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/09/11 14:25:11
  • 終了:2008/09/18 14:30:02

ベストアンサー

id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912008/09/13 15:42:26

ポイント20pt

コメントが無効なので回答で失礼します。


(1)はPHP ではなくともJavaScript でできると思いますが、PHPでの単純なサンプルです。

<html>
<head>
<title>CONFIRM TEST</title>
<?php
if( ! isset( $_POST["mode"] ) ) {
print <<<_CONFIRM_HTML
<script type="text/javascript">
<!--
function myConfirm() {
 if ( confirm("本当に作成しますか?") == true ) {
  document.myForm.submit();
 }
}
-->
</script>
_CONFIRM_HTML;
}
?>
</head>
<body>
<?php
if( !isset( $_POST["mode"] ) ) {
 print '<form name="myForm" method="POST" action="'.$PHP_SELF.'">';
 print '<input type="button" value="出品リストの作成" onclick="myConfirm()">';
 print '<input type="hidden" name="mode" value="0">';
 print '</form>';
} else {
    print '<font size="7" color="BLUE">Thank You!!!</font><br><br>';
    print '<input type="button" value="確認" onclick="window.close();">';
}
?>
</body>
</html>

(3)の目的が分からないのですが、ボタンを押すたびに新しいテーブルを作成するのでしょうか。

動的にテーブルを作成するとしたら、データベースの運用を考え直した方が良いと思いますが、

そうだとしたら、テーブル名はどうするのでしょうか。


単に生成した状態を、データとして保存したいだけであれば、ボタンを押した結果を格納する

テーブルを一つ用意して、そちらに格納するようにした方が良いと思います。



(4) に関しては、下記が参考になると思います。

CSV に EXCEL 用というのはなく、CSVというのはデータの規格です。

特に今回文字列の先頭に0をつけたりということはなさそうですから、単純なCSVでよいと思います。

http://php.eweb-design.com/0303_dl.php


不明な点は、コメントで確認できるとやりやすいので有効にお願いします。

id:aiomock

ご回答ありがとうございます。試してみます。

分からない所後ほど書かせていただきます。

時間がありましたらよろしくお願いいたします。

2008/09/13 19:23:51

その他の回答(4件)

id:nake No.1

nake回答回数87ベストアンサー獲得回数02008/09/12 06:43:10

ポイント20pt

グループ化はこのあたりが参考になります。

http://www.techscore.com/tech/sql/05_08.html

SQLの基本的なところはこのサイトに全て載ってますよ。

id:aiomock

ありがとうございます。勉強してみます。

2008/09/12 15:15:11
id:backupper No.2

backupper回答回数95ベストアンサー獲得回数102008/09/12 17:47:53

ポイント20pt

(1) は不可逆操作ではないので javascript の confirm での確認で十分だと思います(使い勝手も良い)。

<form action="-" method="post" onsubmit="return confirm('実行しますか?');">~</form>

(2)データの抽出は以下の様な単純なSQLで可能(概念です。そのままでは動きません)。

SELECT GROUP, PRODUCT, PRICE, INTRODUCTION, Remarks(4), Remarks(6) FROM AUCTION_Y WHERE GROUP = 'B' AND Remarks(4) = '4日' AND (Remarks(6) BETWEEN '13時' AND '14時')

(2)および(3) メモリ内で済む操作なので、新たにテーブルを作る必要は無いと思います。テーブルを作ってデータを格納する事は可能ですが、良い設計とは思えません(特別な理由があるのなら別ですが)。


(4)PHP5以上で使用できる、fputcsv を stdin に対して使うと楽に実装できます。しかし、個人的にはTSVで出力する事をオススメします。


http://jp2.php.net/manual/ja/function.fputcsv.php

id:aiomock

ご回答ありがとうございます。試してみます。

2008/09/13 17:35:21
id:Mook No.3

Mook回答回数1312ベストアンサー獲得回数3912008/09/13 15:42:26ここでベストアンサー

ポイント20pt

コメントが無効なので回答で失礼します。


(1)はPHP ではなくともJavaScript でできると思いますが、PHPでの単純なサンプルです。

<html>
<head>
<title>CONFIRM TEST</title>
<?php
if( ! isset( $_POST["mode"] ) ) {
print <<<_CONFIRM_HTML
<script type="text/javascript">
<!--
function myConfirm() {
 if ( confirm("本当に作成しますか?") == true ) {
  document.myForm.submit();
 }
}
-->
</script>
_CONFIRM_HTML;
}
?>
</head>
<body>
<?php
if( !isset( $_POST["mode"] ) ) {
 print '<form name="myForm" method="POST" action="'.$PHP_SELF.'">';
 print '<input type="button" value="出品リストの作成" onclick="myConfirm()">';
 print '<input type="hidden" name="mode" value="0">';
 print '</form>';
} else {
    print '<font size="7" color="BLUE">Thank You!!!</font><br><br>';
    print '<input type="button" value="確認" onclick="window.close();">';
}
?>
</body>
</html>

(3)の目的が分からないのですが、ボタンを押すたびに新しいテーブルを作成するのでしょうか。

動的にテーブルを作成するとしたら、データベースの運用を考え直した方が良いと思いますが、

そうだとしたら、テーブル名はどうするのでしょうか。


単に生成した状態を、データとして保存したいだけであれば、ボタンを押した結果を格納する

テーブルを一つ用意して、そちらに格納するようにした方が良いと思います。



(4) に関しては、下記が参考になると思います。

CSV に EXCEL 用というのはなく、CSVというのはデータの規格です。

特に今回文字列の先頭に0をつけたりということはなさそうですから、単純なCSVでよいと思います。

http://php.eweb-design.com/0303_dl.php


不明な点は、コメントで確認できるとやりやすいので有効にお願いします。

id:aiomock

ご回答ありがとうございます。試してみます。

分からない所後ほど書かせていただきます。

時間がありましたらよろしくお願いいたします。

2008/09/13 19:23:51
id:sect No.4

sect回答回数5ベストアンサー獲得回数02008/09/13 17:20:54

ポイント20pt

1.phpというよりはhtml/javascript

<input type="button" value="実行" onclick="if(confirm('実行します')){document.form.submit();}else{alert('キャンセルしたよ')}">

2、3.AUCTION_Yの抽出とテーブル作成とデータ登録

create table [テーブル名_重複しないように名前は工夫して] as

 select

  GROUP,PRODUCT,PRICE,INTRODUCTION,'4日','午後13時から午後14時'

 from AUCTION_Y

 where GROUP='B'

4.ダウンロード時にexcelが開くようにする

 select

  GROUP,PRODUCT,PRICE,INTRODUCTION,Remarks4,Remarks6

 from [作ったテーブル]

でselectした結果を

print文で出力。またはhtml形式でprint。

(最初にレスポンスヘッダーを設定しておく)

http://www.bricklife.com/weblog/000051.html

なんでテーブル作りたいのか分からないけど、あんましスマートな方法じゃないね。

「出品テーブル」作って管理した方が良いとおもう。

id:aiomock

ご回答・ご指摘ありがとうございます。試してみます。

2008/09/13 19:25:31
id:chuken_kenkou No.5

chuken_kenkou回答回数722ベストアンサー獲得回数542008/09/13 18:29:37

ポイント20pt

(2)(3)

まず、groupなど、予約語と同じ名称の表や列を使う場合、「`」(バッククォート)で名前を囲む必要があります。

MySQL :: MySQL 5.1 リファレンスマニュアル :: 8.3 MySQLでの予約語の扱い

AUCTION_Y表に、日時に関する情報がありませんが、結果では日時の情報を入れるようになっていますが?ここでは、日時は定数で入れるものとします。

drop table if exists NewTable;
create table NewTable
(`GROUP`         char(1),
 `PRODUCT`       varchar(10),
 `PRICE`         int,
 `INTRODUCTION`  varchar(50),
 `Remarks4`      varchar(50),
 `Remarks6`      varchar(50));

insert into NewTable
 select `GROUP`,`PRODUCT`,`PRICE`,`INTRODUCTION`,'4日','午後13時から午後14時 '
  from AUCTION_Y
  where `GROUP`='B'
;

(4)

CSV形式での出力方法はいろいろありますが、ここではMySQLのselect文で、 into outfileを使用する例を示します。

select *
 into outfile 'c:/temp/mysql/data.csv'
  fields terminated by ','
  optionally enclosed by '"'
  lines terminated by '\n'
 from NewTable
;
id:aiomock

ご回答ありがとうございます。

試してみます。

2008/09/13 19:26:57
  • id:aiomock
    Mook さん

    実際に命令文を試してみたのですがJAVAScriptは出来ましたが、CSV出力がうまく出来ません。

    JAVASCRIPTのコードとCSV出力命令をあわせてみたのですがOKボタンを押す白いページに移動し確かにデータベースに入っている文字が出力されるのですが文字化けしております。

    文字はUTF-8形式で入力されたものです。

    出来ればOKボタンを押すと同時にCSVの添付ファイル形式でダウンロードが出来ればいいと考えているのですが可能でしょうか?

    その他の質問(2)(3)に関してはnakeさん のページを参考に勉強してみましたが

    新しいページというのはクエリによって出来たテーブルを指していたようで誤解を招き申し訳ありません。
  • id:Mook
    新しい質問を建てられたようなので、詳細はそちらで解決いただくとして、
    提示した方法で表示する場合、データコンバートをUTF-8から Shift-Jisなりに
    すれば、正しく動作すると思います。

    表記の例では正しい動作は、画面に表示されるのではなく、ファイルとして
    ダウンロードされるはずなのですが。

    それから、誤解されているようですが、XLS の拡張子は Excel に対応するもので
    あって、CSV は拡張子もCSV の方が良いでしょう。
    EXCEL はこれをサポートしており、そのままで開きます。

    XLS はEXCEL ファイルのフォーマットで、CSV はテキストファイルです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません