人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLでのクエリの質問です。
まず、果物マスタというテーブルがあり、(ID SERIAL,名前 VARCHAR)のような形でデータが格納されているとします。これに値段テーブルというのが別に存在し、(果物ID INT,価格 INT)のようなデータを格納するとします。
値段テーブルにデータを挿入する際、INSERT文で(1(果物ID),100)ではなく、('りんご',100)のように視覚的に分かりやすくデータを挿入する方法はないでしょうか。
なお、果物マスタは当然のごとく増減します(ENUMは使えない)し、値段テーブルには全ての果物の値段は記載されません。
何か良い方法をご存じの方、お教えください。

●質問者: shinp
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:enum MySQL りんご クエリ データ
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● きゃづみぃ
●30ポイント

>('りんご',100)のように視覚的に分かりやすくデータを挿入する方法

SQL文を わかりやすくするために ということですね?

この場合は コメントを使えばいいです。

(1,/*りんご*/,100)

こんな感じで 注釈してやれば わかりやすくなりますよ。

/* が コメントの開始で

*/ ここまで コメントになります。

文中に 使えるコメントです。

◎質問者からの返答

かなり良いアイデアだと思いました。手動でクエリを作成しているので、入力の手間がそんな変わらないのは結構良いです。

でも、IDと名前を手動対応させねばならないので、誤入力が怖いです。


2 ● どたん
●10ポイント

SQL文に直接 ('りんご',100) という書き方ができるかどうかという主旨でしたら、できません。せっかく果物マスタを分離した意味が無くなりますから。


入力インターフェースで ('りんご',100) という形にしたいということなら可能です。

UIにHTMLを使うなら、果物マスタをSELECT-OPTIONタグでプルダウンにする方法などが考えられます。

◎質問者からの返答

想定としては手でSQL文を作成しているものとお考えください。マスタデータ手動入力(効率悪いですよね、確かに!)の際、面倒くさくなってきたので質問した次第です。


3 ● うぃんど
●10ポイント

phpなどで入力用フォームを作って、例えば「りんご」と入力された場合には、まずは果物マスタに「りんご」が存在するかどうかを問い合わせ、存在した場合には「りんご」の価格を値段テーブルに書き込むというようなステップを踏んだりします(存在しない場合には果物マスタに追加するかどうかを問い合わせたりということも行ったりします)

従いまして、まずお目にかかることもないと思いますが、どうしてもSQLだけでということであればサブクエリを使って下記のような具合で出来なくはないです

INSERT `値段テーブル` VALUES((SELECT ID FROM `果物マスタ` WHERE `名前`='りんご' LIMIT 0,1), 100);
◎質問者からの返答

現在のやり方です。但し、実際に入力するテーブルは

(果物ID,野菜ID,肉ID)のようになっているため、このやり方だと可視性を損ねるどころか見づらくて泣けてくるため、途中で採用するのをやめました。


4 ● どたん
●20ポイント

Excelをお持ちでしたら、果物マスタと値段テーブルを別々のシートに用意し、果物マスタを対象として値段テーブルにリスト入力できるようにしてはいかがでしょう。


RDBMSがCSVのインポートに対応していれば、Excelで作った値段テーブルをインポートするのが最も効率が良いでしょう。

VBAを使って「エクセルでSQL文を自動で出力させたい」の方法でSQL文を生成するやり方もあります。

◎質問者からの返答

まあ、時間と余裕があればそうするのですが、その手間を省く(テキストエディタでSQL編集するだけで済む)方法を求めたのが今回の質問でした。


5 ● うぃんど
●50ポイント ベストアンサー

MySQLのバージョンにもよりますけど5.0以降であれば

一連の動作(SQL)をストアドプロシージャとして登録しておいて

INSERTコマンドの変わりにパラメータ付きで呼び出して実行させるのがシンプルでしょうね

「MySQL ストアド」でググればサンプルは色々でてきますので、下記一例

http://thinkit.co.jp/cert/article/0703/13/6/2.htm

◎質問者からの返答

ストアドファンクション!その手があったか!

まあ、ぶっちゃけますとENUM自体の便利さは認識しておりましたので、ENUMを動的に変更…つまり、

果物テーブルを(ID,キー,名前)とした上で

値段テーブルを(ENUM,値段)とし、果物トリガーにINSERTされたタイミング値段テーブルをALTERする方法を模索しておりました。(結局できなかった)

SELECTサブクエリを打つ部分を個別にfunctionにしてしまう方が、圧倒的に楽ですね!

エクセル作成の手間より複雑なSQL書く方が楽だと考える弊社にとっては、ぴったりの方法でした! ありがとうございます!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ