- ベストアンサー
複数テーブルからのデータ参照方法とは?
taka_tetsuの回答
select 出庫テーブル.SID, ユーザマスタ1.U_NAME, 出庫テーブル.Y_ID, ユーザマスタ2.U_NAME from 出庫テーブル, ユーザマスタ ユーザマスタ1, 商品予約テーブル, ユーザマスタ ユーザマスタ2 where 出庫テーブル.U_ID = ユーザマスタ1.U_ID and 出庫テーブル.Y_ID = 商品予約テーブル.Y_ID and 商品予約テーブル.U_ID = ユーザマスタ2.U_ID
関連するQ&A
- 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で 4つのテーブルからデータを取得する方法を教えてください。 4つのテーブルの構造は全く同じです。 構造的には id・・・int name・・・varcher(30) point・・・int start・・・datetime end・・・datetime tableA,tableB,tableC,tableDの4つのテーブルからpointのデータを昇順に取得したいです。 よろしくお願いします。
- 締切済み
- MySQL
- マスターテーブルからデータを取り出すには
現在MySQLのデータベースで マスターのテーブルをつくりマスターにデータを保存し、 別のテーブルから、マスターのデータを取り出して PHPで表示させる方法を考えているのですが、どのようなやり方 があるのかまったくわかりません。 マスターテーブル id text 1 ほん 2 みかん 3 つくえ 4 でんわ 5 えんぴつ 別のテーブル id01 id02 id03 5 2 4 1 4 3 2 2 1 3 1 2 別のテーブルの1、4、3などはマスターテーブルのidと連動していて 3ならつくえ、4ならでんわとなるようにしたいです。
- 締切済み
- MySQL
- 複数のテーブルを外部結合する
複数のテーブルを外部結合してSUMをとってきたいとき、SQLServerではどのような結合にすればよいのでしょう。 一対一の関係なら「LEFT JOIN」を使って「FROM テーブルA LEFT JOIN テーブルB ON テーブルA.フィールド = テーブルB.フィールド」ができますが、一対複数の関係で書き方がよくわからず、かなり困っています。 例) ユーザーマスター ・ユーザーID ・ユーザー氏名 ○月売上テーブル←○には1~12が入る ・ユーザーID ・売上金額 欲しいデータは ・ユーザーID ・ユーザー氏名 ・SUM(1月売上テーブル.売上金額) 1月 ・SUM(2月売上テーブル.売上金額) 2月 ・SUM(3月売上テーブル.売上金額) 3月 以降、12月まで続く ORACLEだと↓のやり方で、 ・ユーザーマスターはすべて ・各月の売上テーブルはユーザーID毎に集計(外部結合) を出力してくれるのですが…。 SELECT u.ユーザーID,u.ユーザー氏名, SUM(m1.売上金額),SUM(m2.売上金額),SUM(m3.売上金額),,, FROM ユーザーマスター u, 1月売上テーブル m1, 2月売上テーブル m2, 3月売上テーブル m3,,, WHERE u.ユーザーID=m1.ユーザーID(+) AND u.ユーザーID=m2.ユーザーID(+) AND u.ユーザーID=m3.ユーザーID(+),,, GROUP BY u.ユーザーID,u.ユーザー氏名 ORDER BY u.ユーザーID,u.ユーザー氏名
- ベストアンサー
- SQL Server
- MySQLでの複数テーブル(4つ)への検索について
はじめまして、こんばんは。 現在、ECサイトを構築中なのですが、MySQLにPHPから検索をかけたいのですが、どうにも詰まってしまったので、投稿させて頂きました。 PHPバージョン:PHP 5.2.6 DBバージョン:MySQL 4.1.22 機能としては、購入履歴から、購入商品のランキングを作りたいと思っております。 ランキング自体の表示はOKなのですが、そこに商品のカテゴリーを表示させたいのです。 関係するテーブルは以下の通りです。 【order】購入履歴テーブル product_id:商品ID 【products】商品テーブル product_id:商品ID name:商品名 image:商品画像 【p_category】商品カテゴリーテーブル product_id:商品ID category_id:カテゴリーID 【category】カテゴリーテーブル category_id:カテゴリーID category_name:カテゴリー名 parent_category_id:親カテゴリーID 【表示させたい項目】 product_id:商品ID name:商品名 image:商品画像 category_id:カテゴリーID category_name:カテゴリー名 parent_category_id:親カテゴリーID 現在のソースは以下の通りです。 --------------------------------------- SELECT count(o.product_id) as rank, name, image, p.product_id FROM order as o, products as p WHERE o.product_id=p.product_id GROUP BY name, image, p.product_id ORDER BY rank desc limit 5 --------------------------------------- 上記にプラスしたいのは、 p.product_idと【p_category】のproduct_idが一致したcategory_idを取得して、【p_category】のcategory_idと【category】category_idが一致したcategory_name、parent_category_idも取得したいです。 分かりにくいうえに、長文になってしまいましたが、ご指導・ご鞭撻のほど宜しくお願い申し上げます。
- ベストアンサー
- MySQL
- ふたつのテーブルを参照してデータを抜き出す方法
ふたつのテーブルを参照してデータを抜き出す方法を教えてください。ふたつのテーブルの構造は同じではありません。MySQL 4.0.2x です。 テーブル entry [ title | id | other ] sofile [ fileinfo | other | url | other ] テーブルentryからtitleおよびidフィールドのセットを全レコードからランダムに5個抽出し、 idと同じ数値をfileinfoフィールドに持つレコードのurlフィールドの値をテーブルsofileから抽出し、 titleとurlを出力、ということをさせたいです。 1個のテーブルからランダムに取り出すことはできたのですが、そのランダムの結果を受けて二つ目のテーブルからデータを取り出す方法がわかりません。ご教授いただければ幸いです。 PHPコード $ck = "SELECT * FROM entry WHERE status=2 ORDER by rand() LIMIT 5 $entry = mysql_query($ck); while ($rows = mysql_fetch_array($entry)) { echo "{$rows["title"]}\n"; echo "{$rows["id"]}\n"; }
- ベストアンサー
- MySQL
- 助けて>< 3つのテーブルで簡単な集計
下記のような3種類のテーブルがあります。 これを集計して、指定したユーザーの指定月のアクセス日時と売上げ金額を表にしたいと思っています。 こんな感じに。 +--+--------+----------+-------+-----+ | id | username| date | access | sales | +--+--------+----------+-------+-----+ | 1 | admin | 2010-11-13 | 2 | 5000 | | 1 | admin | 2010-11-14 | 2 | 5000 | | 1 | admin | 2010-11-15 | 1 | 20000 | +--+--------+----------+-------+-----+ SELECT u.id AS id, u.username, DATE(a.created_at) AS date, COUNT(*) AS access, SUM(s.amount) AS sales FROM sf_guard_user u INNER JOIN sales s ON u.username = s.user_id LEFT JOIN access_log a ON u.username = a.user_id WHERE (u.username = 'admin' AND a.created_at > '2010-11-01 00:00:00' AND a.created_at < '2010-11-30 23:59:59') GROUP BY date ORDER BY a.created_at; とやってみたのですがダメでした;; ■ユーザー情報テーブル mysql> select id,username from user; +--+---------+ | id | username | +--+---------+ | 1 | admin | +--+---------+ ■アクセスログテーブル mysql> select * from access_log; +--+-------+--------+------------------+ | id | user_id | ip | created_at | +--+-------+--------+------------------+ | 1 | admin | 127.0.0.1 | 2010-11-13 21:56:54 | | 2 | admin | 127.0.0.1 | 2010-11-13 21:56:54 | | 3 | admin | 127.0.0.1 | 2010-11-14 21:56:54 | | 4 | admin | 127.0.0.1 | 2010-11-14 21:56:54 | | 5 | admin | 127.0.0.1 | 2010-11-15 21:56:54 | +--+-------+--------+------------------+ ■売上げ金額テーブル mysql> select * from sales; +--+-------+------+------------------+ | id | user_id | amount| created_at | +--+-------+------+------------------+ | 1 | admin | 5000 | 2010-11-13 21:56:54 | | 2 | admin | 5000 | 2010-11-14 21:56:54 | | 3 | admin | 5000 | 2010-11-15 21:56:54 | | 4 | admin | 5000 | 2010-11-15 21:56:54 | +--+-------+------+------------------+
- ベストアンサー
- MySQL
- 複数のテーブルの値を取り出す方法
今Postgres でCGIと連携させたのを作っているのですが、 同じデータベースの複数のテーブルから、同じ列を取り出すときはどうしたらいいのでしょうか? 一つ目のテーブル 二つ目のテーブル id|name id|name 1 |sakura 1|inu 2 |kosumosu 2|neko このなかの、nameだけ取り出したいです。 よろしくお願いします。
- ベストアンサー
- PostgreSQL
- 一度に関連する他のテーブルの行も取得したい
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
- 2つの関連するテーブルで指定した値を条件に取得したい
mysql5.1.33を使用しています。 次のような構成で、 テーブル「tbl1s」 id int(11) テーブル「tbl2s」 id int(11) name varchar(30) テーブル「tbl1s_tbl2s」 id int(11) tbl1_id int(11) tbl1sの外部キー tbl2_id int(11) tbl2sの外部キー テーブル「tbl1s」 +------+ | id | +------+ | 1 | +------+ | 2 | +------+ | 3 | +------+ テーブル「tbl2s」 +------+-------+ | id | name | +------+-------+ | 1 | sato | +------+-------+ | 2 | suzuki | +------+-------+ | 3 | tanaka | +------+-------+ テーブル「tbl1s_tbl2s」 +------+-------+-------+ | id | tbl1_id | tbl2_id | +------+-------+-------+ | 1 | 1 | 1 | +------+-------+------+ | 2 | 1 | 2 | +------+-------+------+ | 3 | 3 | 1 | +------+-------+------+ 「tbl1s」テーブルの行を「tbl2s」テーブルのnameを検索条件にして取得したいのですが どのように記述すれば良いのでしょうか? 例えば「sato」を条件にした場合は、 テーブル「tbl1s」 +------+ | id | +------+ | 1 | +------+ | 3 | +------+ を取得したいです。
- ベストアンサー
- MySQL