- ベストアンサー
データベースのデータの持たせ方・取得方法について
- MySQLを使用してWebアプリ開発を行っているときに、ユーザ情報として趣味を最大5件(3件は必須)で入力できるようにしたい場合、どのようにデータを持たせるべきか悩んでいます。テーブルAとテーブルBを使用することを考えていますが、他にも良い方法があれば教えていただきたいです。
- ユーザは自由に入力ボックスに値を入力し、登録ボタンが押されると、テーブルBを検索してヒットすればそのIDをテーブルAに登録し、ヒットしなければテーブルBに新規登録し、そのIDをテーブルAにも登録する仕組みで考えています。
- また、このデータ構造でユーザ名と趣味1〜5の趣味名を一覧表示する場合、どのようなSELECT文でデータを取得するべきかわかりません。テーブルAとテーブルBをJOINして、結合したカラムを取得する方法を教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- データベーステーブル設計
簡単なアプリケーションを作ろうとしています。内容は、レストランのデータベースです。画面には、単純にレストラン名、住所、電話番号、営業時間、評価を表示させたいです。この「評価」は、このアプリケーションを使用する3人のユーザが入力する1~5の値の平均値としたいです(ユーザはメンテナンス画面から1レストランにつき1回まで評価値入力可能)。つまりユーザAが4、ユーザBが5、ユーザCが1を入力した場合、4+5+1/3=3.3を表示します。テーブルを設計した経験がないので教えてほしいのですが、この場合、どのようなテーブルを作れば最もシンプルできれいに出来るのでしょうか。まずレストランテーブルを作成する必要があると思いますが、「評価」があるために1テーブルでは不足だと思います。評価カラムの値はユーザが値を入力すれば変動することになるので、別テーブルを参照させるようにすべきなのでしょうか?評価テーブルというものを考えてみましたが、ユーザ名とレストランIDの複合をプライマリキーとし、評価値カラムをもたせるとしても、どこに平均値を持たせればいいのかわかりません。テーブル設計の模範例を教えて頂けると助かります。宜しくお願いします。
- ベストアンサー
- Oracle
- データベースの設計について教えてください。
データベースの設計について教えてください。 基本的な質問ですみません。宜しくお願いいたします。 単純なテーブルで表現しますが、 パターンA、Bのどちらのテーブルで設計するのが良いのでしょうか。 DBはmysqlで5000万件のデータで検索のみのデータベースです。 【前提】 ユーザは複数のメールアドレスを持ちます。 画面から、このユーザのもつメールアドレスを表示させる仕様だとします。 【userマスタ】 (PK)ユーザID ユーザ名 会社名 <パターンA> 【mailテーブル】 (PK)ユーザID (PK)ユーザメールアドレス モバイル用アドレス <パターンB> 【mailテーブル】 (PK)ユーザメールアドレス モバイル用アドレス ユーザID ←インデックスをはります。
- ベストアンサー
- MySQL
- データの取得方法
Aテーブル{ id char(3) not null, name varchar(10), a_no char(5), b_no char(5), c_no char(5), date timestamp } Bマスタ{ no char(5), name char(10) } 上記のようなDBがあるのですがAテーブルのa_no、b_no、c_noに入るのはBマスタのnoになります。 下記のようにデータを取得したい場合、どうすればうまく取得できるのでしょうか。 A.id, A.name, A.a_no, カラム名をname1としてB.name, b_no, カラム名をname2としてB.name, c_no, カラム名をname3としてB.name そんなに難しいことではないと思うのですが、考えれば考えるだけ頭の中でこんがらがってきて困っています。 よろしくお願いします。
- ベストアンサー
- MySQL
- SQLでデータを1件だけ取得したいのですが。
SQLでデータを1件だけ取得したいのですが。 以下のようなテーブルが2つあるとします。 ------------------------------------ テーブルA テーブルB 値X 値X 値Y 1 1 20 2 2 NULL 3 2 60 4 2 70 4 NULL 4 NULL ------------------------------------ ここで、テーブルAの値Xと、テーブルBの値Xをリンクさせます。 テーブルAにデータがあれば、テーブルBに無くても出力します(外部結合イメージ) テーブルAの値Xに対して、テーブルBの値Xは2件以上リンクされる可能性があります。 この場合は1件のみ出力します。 その1件の決め方は、テーブルBの値YがNULLでは無く最大の物です。 但し値Yは全てNULLの可能性もあるので、その場合NULLとして1件出力します。 上記の出力イメージ ------------------------------------ 値X 値Y 1 20 (1件の場合そのまま出力。1件がNULLでもそのまま出力) 2 70 (NULLではない最大の1件を出力) 3 NULL (テーブルBになくても出力) 4 NULL (値が全てNULLの場合、NULLとして1件出力) ------------------------------------ どのようなSQLを記載すれば実現可能でしょうか?
- ベストアンサー
- Oracle
- データ取得に関して
以下の3つのテーブルがあったとします。 table1 ┌────┬───────┬──┬──────┬────┐ │●案件ID│●共有ユーザID│氏名│氏名フリガナ│利用者ID│ └────┴───────┴──┴──────┴────┘ table2 ┌────┬────┬───┬─────┬────┐ │●案件ID│登録者ID│登録日│パスワード│タイトル│ └────┴────┴───┴─────┴────┘ table3 ┌────┬────────┬─────┬───────┐ │●案件ID│●共有ファイルID│ファイル名│ファイルサイズ│ └────┴────────┴─────┴───────┘ table1の利用者IDのみを指定して、 table2.タイトル table3の該当案件IDのカウント数、 table3の該当案件IDのカウント数が1の場合、ファイル名 を取得したいのですが、SQLがうまくかけません。 どなたかご教示お願い致します。 mysql5.0.41
- ベストアンサー
- MySQL
- 異なるスキーマからデータを抽出するには?oracl、PL/SQL
Oracle初心者です。検索してもなかなかhitしないので、質問させていただきます。 aaaとbbbというスキーマがあると仮定します。 aaaにはパスワードテーブル bbbにはユーザテーブルがあるとします。 ユーザテーブル、パスワードテーブルにはそれぞれuser_idカラムがあり、そのuser_idをキーにして、aaaのpasswordカラムのデータを取得したいと思っています。 sql*plusでbbbに接続して、作業をしています。 言語はPL/SQLを使用しています。 単純に SELECT a.password FROM aaa.パスワードテーブル a, bbb.ユーザテーブル b WHERE a.user_id = b.user_id とすれば良いのかと思っていたら、違うようで、オブジェクトが存在しないと言うエラーになりコンパイルが通りません。 このよう違うスキーマのテーブルを参照する場合、どのようにすれば良いのでしょうか?
- 締切済み
- Oracle
- Access 旧データを新データに入替する方法
テーブルAとBがあるとします。 テーブルAには A固有ID、データX(旧データ) が入っており テーブルBには B固有ID、A固有ID、データX(旧データ)、データY(新データ) が入っています。 ※「データX」に変更がない場合、テーブルBに同ID(タプル)は存在しません。 これを、クエリで出力するときに ID、データ(最新のもの)を出力したいのですがどうすれば良いでしょうか? 説明下手ですいません。 【テーブルBにデータがない場合】 A固有ID→ID データX→データ データY→(存在しません) 【テーブルBにデータがある場合】 A固有ID→ID データX→× データY→データ
- ベストアンサー
- オフィス系ソフト
- テーブルの列名をデータとして設定しておき取得する
テーブルが2つあるとします。 テーブルAにはテーブルBの列名がデータとして登録されてます。 テーブルBには値が格納されてます。 テーブルA Key field1 field2 field3 ------------------------------ 1 item2 item3 item5 2 item1 item2 item5 ------------------------------ テーブルB Key item1 item2 item3 item4 item5 -------------------------------------------- 1 101 205 350 420 510 2 111 112 113 114 115 -------------------------------------------- ここでテーブルAとテーブルBへキーを指定して、 テーブルAのfield1~field3に登録されたすべての列名を元にテーブルBから値を取得したいです。 例として キー1を指定して取得すると 205,350,510 が取れます (item2,item3,item5の列名をテーブルAで指定した為) キー2を指定して取得すると 111,112,115 が取れます キーをパラメータとして与え、 できれば2つのテーブルを結合し、1回のSQLで取得する方法はありますでしょうか? (1回のSQLでなくても簡易であれば良いですが) よろしくお願い致します。
- ベストアンサー
- Oracle
- javaにてデータ取得
JAVAカテゴリーで質問しようかこちらにしようか迷ったのですが。。。 あるテーブルを以下の様に内部結合しています。 select * from t_table a, t_table b where a.id=b.id and a.no=0 and b.no=1 この時、t_tableのあるカラムtestcolを取得したいとおもっております。 言語はjavaで、データベースはpostgreSQLです。 rs.getString("testcol"); rsはResultSetオブジェクトです。 これで、データは取得できるのですが、条件のt_tableの別名aのデータ が取得されます。別名bの方を取得したいと思い、単純に rs.getString("b.testcol"); 等としたら、「カラム名がありません」というエラーになりました。 getStringのパラメータとして、カラムインデックス(数値)も 指定できるので、それで行うと取得可能でした。 カラムインデックス指定ですと、プログラムのメンテナンス上支障をきたす ので、なんとか、カラム名の指定で行いたいと思っておりますが、 どうすればいいのでしょうか?
- 締切済み
- その他(データベース)
- テキストボックス内に記入されたデータの取得方法
お願いします。 画面にテキストボックスが500あります。 そのなかに入力されたデータだけを動的に取り出したいと思っています。 ※取り出してデータベース(mysql)へインサートします。 詳しくは、tableが複数あり其の中にそれぞれ特定のテキストボックスが存在しているようになっていますので、特定のテーブル単体では毎回列名は固定されています。 たとえば、一画面にAとBテーブルがあったとして、AとBのテーブル内に ○A→3つのテキストボックス(列名のこと) ○B→6つつのテキストボックス(列名のこと) があったとして、 まず、Aのテーブル内のテキストボックス2つに値を入力されたとします。(3つめのテキストボックスは入力されていない) また、同時にBテーブルのボックス3つに入力されたとします。(残り3ボックスは入力されていません) その際、入力されたAテーブルの2つのボックスに対応する列名(データベース内の)とVALUESの値(テキストボックス内に記入されたデータ)がINSERT文に記述されるような事を考えています。 また、Bテーブルでも同様にしたいと考えています。 つまり、入力されたボックスに焦点をあてて動的にINSERT文を作れないか?という事で、入力されていないテキストボックス名はINSERT文から省きたいと考えています。これを動的にしたいのです。 >strSql = strSql & "'" & textbox1.Text & "'," 上の文の「 textbox1.Text 」を入力されたテキストボックスから動的に変更出来ないのかが気になっています。 例えば 、3つのテキストボックスがありそのうち、1番目と2番目に入力があったとき、変数をiとして 1 と 2 が入るようにしたいので以下のように文が書けるのだろうか?? 「 textbox[i].Text 」 と思っています。
- 締切済み
- C・C++・C#
お礼
ご教示いただきありがとうございました。 無事にできました。