- ベストアンサー
会員関連テーブルの構成について
- MySQLとPHPでデータベースを勉強している初心者です。会員関連のテーブルについて下記のような構成を考えています。
- idを主キーにしてTable AとTable Bを関連付けするつもりですが、何らかの原因で使っている途中でidの関連付けがうまくいかなくなることなどあるのでしょうか? そのような場合、idにずれが生じても見つけられないのではなどと考えてしまいます。Table Bにidとユーザー名を載せたり、いっそ一つのテーブルで管理するほうが確実でしょうか。通常はどのようにしていますか?
- Table Bは現会員と退会者を一つのテーブルで管理し、現会員のプロファイルの一部を公開します。退会者のプロファイルは使わないのですが、新規登録者とユーザー名がかぶらないようになど保管の必要も感じます。退会者の情報の取り扱いについてもアドバイスいただければと思います。
- みんなの回答 (2)
- 専門家の回答
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
関連するQ&A
- テーブル設計について
会員制の小さなサイトを運営しています。 会員は会員IDで管理しているのですが、テーブル設計が適切であるか判断できず、助言を頂きたく書き込みさせて頂きました。 現在、会員情報テーブル(info)というテーブルが全ての基本となっています。 このテーブルには、会員IDの他、名前や性別、住所、自己紹介文などほとんど全ての会員情報が含まれています。 このほかに会員同士の交流用のテーブル(koryu)がいくつかあり、 そこには、会員IDとその会員が行った内容が記録されています。 で、現状、交流用テーブルを使用する場合、常に会員の名前を会員情報テーブルから引っ張ってきており、これが、処理的に重いのでは無いか、と思っています。 以下はたとえばの例ですが、 select koryu.id, info.name, koryu.contents from info,koryu where koryu.id=info.id のように、毎回、(ほぼ)名前だけを引っ張ってきています。 引っかかっているのは、この「名前だけ」というところで、例えば、会員IDと名前しかないテーブルを作成すれば、もしかしたら、処理が軽くなるのでは・・と思っているのです。 20カラムあるテーブルと関連付けを行う場合と、2カラムのテーブルと関連付けを行う場合、 2カラムのテーブルのほうが、処理は軽くなるのでしょうか?また、軽くなる場合、そうしたほうが良いのでしょうか? (現在、1000名くらいしか会員がいないため、処理が重いということは無いのですが、 安いサーバを使用しているため、処理はなるべく軽くしておきたいと思っています。) よろしくお願いします。
- ベストアンサー
- MySQL
- MySQL複数テーブルからの情報取得に関しまして
Aテーブル...ユーザ情報 Bテーブル...商品情報(AテーブルのユーザIDを列として持っています) Cテーブル...アイテム情報(Bテーブルの商品IDを列として持っています) Bテーブルの一覧リスト表示の画面にて、検索項目として、 Aテーブルのユーザ名、Cテーブルのアイテム名があります。 現在は、LEFT JOINを使って、検索、呼び出しを行っておりますが、 多数のカラムを指定して呼び出しを行っているため、SQL文が長くなってしまっており、 もっとすっきりとしたSQL文を記述したいと考えております。 ※Aテーブル,Bテーブルの組み合わせは他の画面でもよく使われております。 viewという機能を使うことによって、これをすっきりと記述できるようになるのではないかと考えておりますが、viewはこのような使い方をしてもいいのでしょうか。 または、もっとすっきりとした記述を行う技術のアドバイスをお願いいたします。 よろしくお願いいたします。
- ベストアンサー
- MySQL
- 関連テーブルのレコード数の取得
SQL初心者です 関連テーブルのレコード数を取得したいのですがうまくいきません テーブル名:user user_id,user_name 1,aaa 2,bbb 3,ccc テーブル名:user_agreements user_id,money 1,5000 2,3000 2,5000 1,8000 2,4500 3,10000 3,2500 上記のようなデータがあった場合に、ユーザーIDと契約件数という結果を得たいと思っています user_id,sum_agreements 1,2 2,3 3,2 このような結果を得る為のSQL文はどのように書けば宜しいでしょうか 宜しくお願い致します
- ベストアンサー
- その他(データベース)
- ACCESS テーブルの結合
同じmdb内で複数テーブルがあります。(テーブル1から10まで)フィールド名はすべて同じです。それぞれのテーブルのIDは1からオートナンバーになってます。 【例】 テーブル1 フィールド名: ID A B C テーブル2 フィールド名:ID A B C ・ ・ テーブル10 フィールド名:ID A B C ひとつのテーブルで管理したいのですが・・・教えてください。
- ベストアンサー
- オフィス系ソフト
- 一度に関連する他のテーブルの行も取得したい
MySQLバージョン4.1.16を使用しています。 ちょっとPHPも絡んでくるのですが、こちらのジャンルでお願いします。 テーブル「items」はテーブル「users」のuser_idカラムを 外部キーとして持っています。ここで「users」テーブルの行を取得して、 その値(user_idのaaaaやbbbbなど)を利用して 「items」テーブルのそれぞれ対応する行を取得したいのですが、 $users = (usersテーブルの行を取得するSQL文); $index = 0; foreach ($users as $row) { $users[$index]['items'] = (user_idに対応したitemsテーブルの行を取得するSQL文); $index++; } print_r($users); /* Array ( [0] => Array ( [user_id] => aaaa [items] => Array ( [0] => Array ( [user_id] => aaaa [item_name] => アイテム1 ) [1] => Array ( [user_id] => aaaa [item_name] => アイテム2 ) ) ) [1] => Array ( [user_id] => bbbb [items] => Array ( [0] => Array ( [user_id] => bbbb [item_name] => アイテム3 ) ) ) ) */ と、このように2段階に分けてやれば取得できるのですが、 そうではなくてこれを一度に取得できるSQL文というかやり方はあるのでしょうか? $users = (usersテーブルの行を取得するSQL文);←この段階でそれぞれ対応してるitemsテーブルの行まで取得したい
- 締切済み
- MySQL
- 異なるテーブル間の和
テーブルAの属性item1とテーブルBのitem1の和を求めるにはSQLでどのように記述すれば良いのでしょうか?? tableA ------ id item1 item2 pointer tableB ------ id item1 item2 pointer という2つのテーブルで,tableBのpointerはtableAのidを指しています.
- 締切済み
- その他(データベース)
- mysqlのデータベース設計(1テーブルで管理)
お世話になります。 現在、会員がログインしてブログ管理できる(記事を作成・編集できるシステム)を考えています。 そこでデータベース設計について質問があります。 一般的には、 ・ユーザー情報に関するテーブル ・ブログ記事に関するテーブル この2つを以下のような感じで設計すると思うのですが↓ ■usersテーブル ・id ・ユーザー名 ・パスワード ■articleテーブル ・id ・user_id(記事投稿者のid) ・contents(ブログタイトル、ブログ本文) ・created ・modified 私は、この2つを1つのテーブルですべてまとめて管理することを考えているのですが、 何かデメリットはあるのでしょうか?↓ ■usersテーブル(このテーブル1つですべてまとめて管理) ・id ・ユーザー名 ・パスワード ・contents(ブログタイトル|ブログ本文|記事投稿日|記事編集日) ・created ・modified ちなみにブログ記事は、区切り文字で分けながらcontentsにどんどん詰め込んでいき(updateする)、 取り出すときは区切り文字をexplodeしていく形を考えています。 実際にはもっと項目が多くなるのですが、1ユーザーの情報をすべて1つのテーブルで管理することで個人的に非常にわかりやすい、さらに単純なのでこちらのほうが速度も速いのではないかと思っているのですが、良くないのでしょうか?(あまり見かけないので) どなたか教えていただけると幸いです。 よろしくお願い致します。
- ベストアンサー
- PHP
- 楽天会員(infoseek会員)について
現在楽天の会員に登録しています。それとは別にinfoseekの会員にもなっており、数年前の楽天とinfoseekのサービス統合による関連付けがすでに完了しています。(つまり楽天とinfoseekのログインID、パスワード、楽天スーパーポイントの共通) そんな中、先日ログインID、パスワード、infoseekメールのアドレスが知られたくない人物にばれてしまいました。ログインID、パスワードは直ぐに変更しましたがinfoseekメールアドレスはどこを見ても変更できそうにありません。 普通なら会員登録を削除(退会)し、新たに会員登録し新たなinfoseekメールアドレスを得ればよいのですが、現在スーパーポイントが貯まりに貯まっており、また、この会員登録で楽天カードを発行したので出来ればinfoseekメールアドレスのみ変更できればと思っています。また、TSUTAYAなどにポイント移行は考えていません。 そこで質問ですが、infoseekメールアドレスのみ変更は可能でしょうか?
- ベストアンサー
- その他(ネットショッピング)
- PDOで複数のテーブルを扱いたい
PDOで複数のテーブルを扱いたい 現在ドットインストールというサイトで勉強しております。 http://dotinstall.com/lessons/sns_php_v2 このユーザー管理のレッスンで自分なりに応用してみようと戦っております。 これでは、ログインを行い登録したユーザーのプロフィールを表示するという内容なのですが、管理人とユーザーという風に分けてadminのテーブルに管理者を作成し登録し、登録された会員は自分のプロフィールを表示できるという流れにしたいと思っております。 レッスン通りでは問題なく出来ました。 そこで次にテーブルを分けて表示することにチャレンジしております。 users(会員テーブル)とは別にaddress(住所テーブル)を作成し会員テーブルと同じようにidカラムと住所を入れるtext項目をデータベースに作成しチャレンジしました。 サイト通りプロフィールを表示させる方法でやればこちらもテーブルを読み込ませることはできるのですが、URLの数値を変えれば当然他の人の情報も見えてしまいます。 $meというセッションで取得したいのですがusersの情報はログイン時にセッションとして受け取っているので#meで受け取りができるのですがaddressのテーブル情報にもこのセッション($me)で表示させるにはどのようにすればよいのでしょうか? やりたいことはログインした会員の情報のみ(他人のデータをみれない)表示させたい。 データベースのほかのテーブルもusersのセッションで共有したいということです。 わかりにくい説明で申し訳ございませんが、お助けいただけませんでしょうか。
- ベストアンサー
- PHP
- 2テーブルが同じユーザテーブル参照するときの結合
2つのテーブルで、同じユーザテーブルを参照してデータ取得したいのですが、 どうやって結合すれば良いのでしょうか? ■概要 ・ユーザがアクションに挑戦すると、結果を表示 ・その際、「アクション作成者」と「アクション挑戦者(ユーザ)」を表示したい ※「作成者」「挑戦者」は、同じ「user」テーブルで管理したい ■3テーブル ・「result」「action」「user」 ・「result」「action」テーブルには、それぞれ「user_id」カラムがある ・「result」テーブルには、「action_id」カラムがある。1対多? ■知りたいこと ・一気にまとめて一覧として取得する方法 ・最終的に「結果」と、「result」「action」それぞれに対応した「user」テーブルの「name」カラムを取得したい ■試してみたこと ・これだと「挑戦者名」が取得できない SELECT * FROM result r LEFT JOIN `action` a ON r.`action_id` = a.`id` LEFT JOIN `user` u ON r.`user_id` = u.`id` ・これだと「挑戦者」のユーザIDしか取得できない SELECT *,a.user_id AS actionuser_id FROM result r LEFT JOIN `action` a ON r.`action_id` = a.`id` LEFT JOIN `user` u ON a.`user_id` = u.`id`
- ベストアンサー
- MySQL
お礼
MySQL の注意事項について早速読んでみました。詳しい情報をありがとうございます。 どちらも知らなかった事項なので大変参考になります。InnoDBで作る時のトランザクションの扱いは重要ですね。あまり意識してなかったのですが、オープンソースであることも念頭において使うようにしたいと思います。