• 締切済み

複数のテーブルの検索について

お世話になっております。 題名にありますように、複数のテーブルに登録のあるデータを、テキストフォームやチェックボックス、プルダウンなどのフォームで入力(選択)されたものを(PHPにて)検索したいと考えておりますが、googleなどで調べていても、キーワードが適切でないためか、得たい情報を得られずにおります。 以下のようなテーブル構成で、上記質問のような検索をする場合、(googleなどで検索するには)どのようなキーワードが適切でしょうか?ソースを教えていただくのが簡単ですが、理解を深めたいと考えての質問です。お忙しい中恐縮ですが、アドバイスのほど宜しくお願いいたします。 table_a id name address category table_b no id title subject 上記テーブルA、Bに設定されたフィールドを、各フォームににて入力(選択)されたフォームで一括で検索するソースを学びたいのです。 ※table_a と table_b にある id で紐付けています。

noname#38067
noname#38067
  • MySQL
  • 回答数1
  • ありがとう数0

みんなの回答

回答No.1

SQL文を学んでください。 こんな予約語を使ってSQL文を書きます。 select from left join where

関連するQ&A

  • 複数のテーブルに対して・・・

    過去に同様の質問があったかも知れませんが、Accessのバージョンがかなり古いので質問させて下さいね。 Access97(すみません、ホント古くて…)で、下のような顧客情報管理ファイルを作成しました。 テーブルA<→フォームA> ・顧客ID(主キー: テキスト型) ・氏名 ・情報A1, A2~ ・入力フォームB~への移動ボタン(同一IDレコードの表示) テーブルB<→フォームB> ・顧客ID(主キー: テキスト型) ・情報B1, B2~ テーブルC<→フォームC> ・顧客ID(主キー: テキスト型) ・情報C1, C2~ 最初からテーブルA~Cを結合したものを作ればよかったのですが、 それぞれのテーブルについて細かい入力項目が30~40個あるため、 分割して作成してしまいました(そして今後もテーブルは増える可能性大です)。 現在、テーブルAにだけ、20人分のデータが入っています。 今後も顧客数やテーブルが増える予定なのですが、 その都度テーブルごとに顧客IDをいれるのが面倒になってきました。 そこでお訊ねしたいのですが、テーブルA(を元にしたフォームA)に顧客IDを入れると、 テーブルBやCにも同じテキストが入力されるような設定は可能でしょうか。 最初、クエリーで連結しようとしたのですが、 既にテーブルAにいくつかデータが入っているせいか、どうも上手く反映されません。 単に私の参照方法が下手だったからかもしれませんが…。

  • 複数テーブルのリレーションについて

    こんにちは。 oracleの複数テーブルのリレーションについてご教示頂け ないでしょうか? 実現したいことは下記の通りです。 ■oracleのバージョン oracle 8i 言語 VS2005 VB.net ■実現したいこと  下記の(1)の抽出条件で絞り込んだ(2)の情報を表示 (1)抽出条件  (1)【Table A】の【更新日時】が指定の日時と合致する  (2)【Table A】の【入力者ID】にひもずく     【Table C】の【区分名称】が 指定されたものと合致する (2)表示したいカラム  (1)【Table A】の【入力者ID】に該当する【Table B】の【名前】  (2)【Table A】の【修正者ID】に該当する【Table B】の【名前】 ■■■■■■具体例です■■■■■■■■■■■■■■■■■■■ 各テーブルに以下のようなデータが入力されている場合 画面から下記(1)・(2)の抽出条件がが選択された場合 下記の内容を表示したいと考えています。 ■抽出条件 (1)日時=20009/06/12 (2)区分名称=テスト ■表示結果 入力者 :001-山田 修正者 :002-田中 更新日時:20009/06/12 【Table A】 | 入力者ID | 修正者ID | 更新日時 | ------------------------------------- | 001 | 002 | 20009/06/12 | | 003 | 002 | 20009/06/12 | 【Table B】 | ID | 名前 | 区分NO | ----------------------------- | 001 | 山田 | 1 | | 002 | 田中 | 2 | | 003 | 鈴木 | 2 | 【Table C】 | 区分NO | 区分名称 | ---------------------- | 1 | テスト | | 2 | 本番 | ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 現状以下の方向で進めようとしてるのですが、 これだと「区分名称=テスト」という抽出条件が 追加できずに困っています。 select * from 【Table A】 INNER JOIN 【Table B】 B_1 ON (【Table A】.入力者ID = B_1.ID) INNER JOIN 【Table B】 B_2 ON (【Table A】.修正者ID = B_2.ID) Where 【Table A】.更新日時 = '20009/06/12' 以上、宜しくお願い申し上げます。

  • 複数テーブルからLIKE検索を行いたいのですが、う

    複数テーブルからLIKE検索を行いたいのですが、うまくいかないので教えてください ■やりたいこと ・一つのキーワードで、MAINテーブル「hoge」カラムと、SUBテーブル「hoge」カラムを検索して、該当したレコードを表示したい ■テーブル構成 ・MAIN … 「id」「main1」「hoge」… ・SUB… 「sub_id」「main_id」「sub1」「hoge」… ・1つの「id」に対して、対応する「sub_id」が複数(「id」1は一つだけ。対応する「sub_id」1は複数あります) ■試したこと1 SELECT a.* , r.* FROM main a LEFT JOIN sub r ON a.id = r.main_id WHERE ( a.hoge LIKE '%キーワード%' OR r.hoge LIKE '%キーワード%' ) とやると、2件ヒットするはずなのに、1レコードしか取得できません(1レコードに「hoge」カラムが2つ入ります) ■試したこと2 SELECT a.* , r.hoge as rhoge FROM main a LEFT JOIN sub r ON a.id = r.main_id WHERE ( a.hoge LIKE '%キーワード%' OR r.hoge LIKE '%キーワード%' ) とやると、2件ヒットするはずなのに、1レコードしか取得できません(1レコードに「hoge」と「rhoge」カラムになります) ■試したこと3 FROMで2箇所指定するのかと思ったのですが、 SELECT a.* , r.* FROM (main a,sub r) LEFT JOIN r ON a.id = r.main_id WHERE ( a.hoge LIKE '%キーワード%' OR r.hoge LIKE '%キーワード%' ) 結果は、#1066 - Not unique table/alias: 'r'になります ■試したこと4 LEFT JOINがいらないのかと思い、削除したら、2件ヒットするはずなのに、たくさんヒットしてしまいます ■質問 欲しいのは、キーワード検索した際、該当カラムにヒットした数だけのレコードなのですが、どうすれば良いのでしょうか? ■例 ・東京で検索 ・MAINテーブル「hoge」カラム(2レコード)で2ヒット ・SUBテーブル「hoge」カラム(3レコード)で3ヒット ・ヒットした該当5レコードを取得したい

    • ベストアンサー
    • MySQL
  • 2つのテーブルから検索したい

    テーブルがA・Bの2つあり、どちらも「ID」と「名前」が入っています。IDをキーとして まずテーブルAで検索して見つからなかった場合ばテーブルBから検索するような Select文は、どのような記述になるのでしょうか?また、ビューとして定義する場合には どのような方法になるのでしょうか?よろしくお願い致します。

  • テーブルをまたいだ検索

    このような検索をしたいのですが・・・ 書籍のデータベースを作っていて、 本の著者は共著の場合など、複数の場合があるので、 著者テーブルを別に作りました。 books id, title, publisher 1, AAA, A出版 2, BBB, B出版 3, CCC, C出版 authors(著者)テーブル id, author 1, 田中 2, 佐藤 3, 鈴木 3, 後藤 そして、検索フォームで著者名から検索したいのですが、 どのようにするのが普通なのでしょうか。 「author」テーブルからフォームで入力した「著者名」を検索して、 その後、そのIDをもつ書籍を「books」から引っ張ってくるというイメージなのですが・・・ たとえば著者名に「佐藤」と検索すると「CCC」という本が見つかるようにしたいのです。 また、書籍タイトル、著者名、出版社名を組み合わせて検索できるようにしたいのです。 これはクエリの組み立て方で解決できるのでしょうか? Mysqlのビューという機能を使って解決することはできるのでしょうか? 長くてわかりにくい文章になってしまいましたが、 どうかよろしくお願いします。

    • ベストアンサー
    • MySQL
  • Access 複数テーブルをまとめる

    こんにちは! 過去記事を検索しましたが、該当がなく、苦戦しております… お知恵をお貸し下さいm(__)m テーブル T顧客…顧客ID(主キー)、名前、… T書類1…顧客ID(重複キー有)、書類1ID、… T書類2…顧客ID(重複キー有)、書類2ID、… T書類3…顧客ID(重複キー有)、書類3ID、… T書類4…顧客ID(重複キー有)、書類4ID、…  ・  ・  ・ その他に複数同じような構造のテーブルがあります。 テーブル内には他に様々なフィールドがありますが、同一内容の結合できるフィールドは上記のみです。 上記のテーブルですべての書類IDを取ってきたいのですが、 全テーブルを顧客IDと結合し、選択クエリで抽出すると      顧客ID | 名前 | 書類1ID | 書類2ID | 書類3ID | 書類4ID  1  |  Aさん |  10  |  5 |  20  |  26  1  |  Aさん |  10  |  30 |  20  |  25  1  |  Aさん |  10   |  4 |  20  |  26  1  |  Aさん |  10   |  6 |   20  |  25  2  |  Bさん |  30  |  13 |  25  |  5  2  |  Bさん |  30   |  10 |  26  |  5  2  |  Bさん |  30   |  13 |  26  |  5  2  |  Bさん |  30  |  10 |  25  |  5 のような値が出てきてしまいます…当たり前の結果ですが… やりたいこととして、 (1)一つのテーブルかクエリで抽出 顧客ID   名前   書類1ID   書類2ID   書類3ID   書類4ID  1     Aさん   |  10  |  5  |  20  |  26               |     |  30  |     |  25               |     |  4               |     |  6    2     Bさん   |  30  |  13  |  25  |  5               |     |  10  |  26   のように重複をなくし、 (2)更にまとめたものにしたいです。 顧客ID   名前   書類1ID   書類2ID   書類3ID   書類4ID  1     Aさん     10     5,30,4,6     20     25,26  2     Bさん     30      10,13     25,26     5 最終的に上記にまとまったものをフォームにして、顧客IDごとに抽出し、 顧客ごとの各書類のIDはこれとこれですよ!みたいにしたいのです! 説明が下手で申し訳ありませんm(__)m Access初心者で、独学でコツコツやっているので、知識が乏しいです… 調べてみるとユニオンクエリとかでできるような記事はありますが、 SQL文なども理解ができずに苦戦しております… お手数ですが、ご教示の程 よろしくお願い申し上げます。

  • HTMLソースの検索について

    Postgres 8.3.9を使用しています。 現在使用しているテーブルの中に HTMLソースを格納しているカラムがあります。 テーブル名:contents カラム名:text ※データ例:<a href="http://www.google.co.jp">グーグル</a> HTMLソースが格納されたカラムに対して、キーワードでの検索を行いたいと考えています。 当然ながら以下の様に検索をすると、HTMLソース(例:href)をキーワードとしても検索に引っかかってしまいます。 select * from contents where text Like '%【検索キーワード】%'; なんとか、HTMLソースをキーワードとした場合は検索されずに、 HTMLタグに囲まれた部分(※上記データだと'グーグル')をキーワードとした場合にだけ、 検索されるようにしたいと考えています。 何か良い手法はないでしょうか。 ご教授をお願い致します。

  • 複数行の結果を単一列に連結(複数のテーブルを参照)

    psql (PostgreSQL) 7.3.4です。 困っています 以下のような【TABLE1】と【TABLE2】を TABLE1のt1tot2にで結合した結果を 【A.結果】のように★▲●の行を1行に表示させて取得したいのですがうまくいきません。 【TABLE1】 ID,ID_SUB, TYPE, VALUE A A1 t1 1 ★ A A1 t2 2 ★ A A1 t1 1 ▲ A A1 t2 3 ▲ B B1 t1 1 ● B B1 t2 3 ● 【TABLE2】 ID, TYPEV1 ,TYPEV2 ,Code A 1 1 AAA1 A 1 2 AAA2 ★ A 1 3 AAA3 ▲ B 1 3 BBB1 ●  TYPEV1=TABLE1のt1の値 TYPEV2=TABLE1のt2の値 【得たい結果】 ID, ID_SUB, TYPEV1, TYPEV2,Code A A1 1 2 AAA2★ A A1 1 3 AAA2▲ B B1 1 3 BBB1● 下記でTABLE1の2行を1行にまとめることができましたが、 問題のTABLE2との連結方法が分かりません。 select TABLE1.ID , TABLE1.ID_SUB , TABLE1.VALUE as t1 , (SELECT tbl1.VALUE FROM TABLE1 tbl1 where tbl1.TYPE=t2 and (TABLE1.ID , TABLE1.ID_SUB)=(tbl1.ID , tbl1.ID_SUB)) as t2 from TABLE1 where TABLE1.TYPE = t1 【結果】 ID ,ID_SUB , t1  ,t2 A A1 1 2 ★ A A1 1 3 ▲ B B1 1 3 ● 何か良い方法はありますでしょうか?

  • テーブルのどちらかにデータがない事があるテーブル結合について

    ■table a のテーブル構成 date a_id b_id c_id a_count ■table b のテーブル構成 date a_id b_id c_id b_count value 上記の2つのテーブル構成から、 ■date a_id b_id c_id毎の集計データ date a_id b_id c_id a_count b_count value を抽出するSQLが知りたいです。 table aにあって、table bに存在しない。又は逆もある為、 union しかないと思うのですが、思いつきません。。

    • ベストアンサー
    • MySQL
  • SELECT文 複数のテーブル参照について

    ASPとAccessを使用しています。 フォームから複数の値を入力させ、Access(複数のテーブル)を参照し、結果を表示させたいのですが、SELECT文でエラー表示。 初心者に毛の生えた程度しかしりませんので、教えていただきたく、お願いいたします。 以下3つのテーブルがあります。テーブルAの「検索用ID」(主キー)をテーブルB・Cの「検索用ID」にリレーションシップでつなげています。 tebleA-------------- 検索用ID 名前 備考 ----------------------- tebleB-------------- 検索用ID 地域 ----------------------- tebleC-------------- 検索用ID 職業 ----------------------- フォームで入力させるのはテーブルBの「地域」とテーブルCの「職業」 の値です。 その「地域」と「職業」からOR条件でテーブルAのデータを抽出したいのです。 SQL = "SELECT tebleA.* FROM tebleA,tebleB,tebleC WHERE tebleB.地域 = "& Request.QueryString("地域の値") &" OR tebleC.職業 = "& Request.QueryString("職業の値") &"" SQLに自信がありません・・・よろしくお願いいたします。