• 締切済み

複数のテーブルから値を取得したい

とあるデータベース(mysql)に以下の2つのテーブルがあります。(【テーブル名】カラム名となっています) 【ブログ管理テーブル】 ブログID ブログカテゴリ ブログサイト名 ブログサイトURL  【記事管理テーブル】 記事タイトル 記事URL 記事フィード この2つのテーブルから次のような値を取り出したいと思っています。 ブログカテゴリ 記事タイトル 記事URL 記事フィード 複数のテーブルから値を取り出すには、テーブル同士を結合しないといけないということが分かり結合させてみたのですが、なぜか取り出すことができません・・・しかも、記事が重複して表示されてしまう・・・ 一体どのようなプログラムが必要でしょうか? 以上よろしくお願いします。

  • MySQL
  • 回答数2
  • ありがとう数0

みんなの回答

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

> 結合させてみたのですが とのことですが,結合するための属性が存在しませんから,結合できませんよね。 具体的なデータ例としてはこんなイメージでしょうか。 ブログID ブログカテゴリ ブログサイト名 ブログサイトURL ――――+―――――――+―――――――+――――――――― 00000001 データベース等 ragunasサイト ttp://ragunas.example.com/ 00000002 技術者向け一般 sanugarサイト ttp://sanugar.example.com/ 記事タイトル 記事URL ――――――+――――― 値取得したい ttp://ragunas.example.com/qa/q7149482.html はてな数取得 ttp://ragunas.example.com/qa/q7144233.html 「値取得したい」という記事は,ブログID=00000001 上の記事でしょうか,それとも ブログID=00000002 上の記事でしょうか,分かりませんよね。 (記事URL中のドメイン名 と ブログサイトURLのドメイン名 が同一かどうかで判定する,という手段もありますけれど,これはデータベース設計の原則から離れた例外的な方法です) ですから,後者のテーブルが結合のための属性を含むよう,次のように設計して, ブログID 記事タイトル 記事URL ――――+――――――+――――― 00000001 値取得したい ttp://ragunas.example.com/qa/q7149482.html 00000001 はてな数取得 ttp://ragunas.example.com/qa/q7144233.html SELECT文では次のように結合条件を指定するわけです。 WHERE ブログ管理テーブル.ブログID = 記事管理テーブル.ブログID

ragunas
質問者

補足

>具体的なデータ例としてはこんなイメージでしょうか。 はい。その通りです。説明不足で申し訳ないです。 ちなみに、「ブログ管理テーブル」のほうではデータベースに登録するたびに自動的にブログIDの数字をつけることができるのですが、「記事管理テーブル」のほうで同じように自動的に番号をふると、 【ブログ管理テーブル】 ブログID|ブログカテゴリ|ブログサイト名|ブログサイトURL  00000001 カテゴリ1 ヤフー ttp://a.example.com/ 00000002 カテゴリ2 楽天 ttp://i.example.com/ 00000003 カテゴリ3 MSN ttp://u.example.com/ 【記事管理テーブル】 ブログID|記事タイトル|記事URL|記事フィード 00000001 あいうえお ttp://a.example.com/qa/q7149482.html ttp://a.example.com/xml 00000002 かきくけこ ttp://a.example.com/qa/q7149483.html ttp://a.example.com/xml 00000003 さしすせそ ttp://u.example.com/qa/q7149484.html ttp://u.example.com/xml といった感じになってしまい、ブログIDを自動的につけることができません。 こちらのテーブルにも自動でブログIDがつくようにしたいのですがどうしたらいいでしょうか? 以上、よろしくお願いします。

回答No.1

多分だけど、テーブル同士の関係が、正規化されてないのでは? テーブルの関係として、多体多になっている可能性があるのでは? テーブルの関係は、基本的に、1:1、1:n、n:1のいずれかでなければなりません。

関連するQ&A

  • 複数のテーブルからデータを取得したい

    1つのテーブルから重複したデータを取り除いて表示するときに使う 【select distinct カラム名 from テーブル名;】 がありますよね。 それと同じようなことを複数のテーブルをまたいで行いたいのですがうまくいきません。 ちなみに両方のテーブルのカラム名は同じです。 【select distinct カラム名 from テーブル1 union select distinct カラム名 from テーブル2;】 としても重複を取り除いた後にテーブルを結合してるので結果的に両テーブルの重複した値を取り除くことができず。 そこで 【select distinct T1.カラム名, T2.カラム名 from テーブル1 T1. テーブル2 T2;】 としてみたのですが、クエリを実行中のまま反応がないので悩んでます。 ちなみに2つのテーブルのデータはそれぞれ2万件ほどです。 こういう時どういうsql文を組むのが正しいのでしょうか?

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

    宜しくお願い致します。 2種のテーブルをくっつけて検索結果に反映させたいと思っております。しかし、双方でリレーションしているカラムが無いのですが、やはり結合する事は無理でしょうか? 具体的には・・・ Aテーブル:カラム内容 Aid,title,subtitle,text Bテーブル:カラム内容 Bid,title,subtitle,text ※それぞれのカラム名は同じですが、使用目的が本来全く違う為、どのカラムもリレーションしてません。 このA,Bのテーブルで、本来Aだけを抽出するページがあり、その中に、Bのテーブルからも一部反映させたいのです。Bテーブルに書き込むフォーム上で、例えば『Aテーブルに反映』という様な項目を付けて、そこをチェックしたレコードは、A,B両方のページで同じ内容が見れるといったシステムを作りたいのです。やっぱり無理でしょうか??

    • ベストアンサー
    • MySQL
  • RSSで特定のカテゴリを取得する方法

    今までブログを書いていて、今はHPを作っています。 ブログには様々なジャンルの記事を書いていますが、 HPは特定のジャンルに対して作る予定です。 そこで今までブログに書いた記事をHPにRSSでフィードして載せようと考えていますが、 MagpieRSSを使って最新記事を無事に取得はできましたが、 特定のカテゴリの記事のみの取得はできないでしょうか? ネット上のプログラムを参考にして、 --------------------------- require_once 'rss_fetch.inc'; $url = '取得したいサイトのURL'; $rss = fetch_rss($url); $title = $rss->channel['title']; --------------------------- どこにもカテゴリ取得のコマンドがないのですが、そもそもできないものでしょうか? MagpieRSSじゃなくても、できる方法があれば紹介していただければと思います。 よろしくおねがいします。

    • 締切済み
    • PHP
  • UNIONを使って2つのテーブルの値を算出

    仮に以下2つのテーブルがあったとします。 (両方とも、JOINなどで結合されたテーブルです) tableA |id|nedan|jitubai| |01|1000|900| |02|1500|1000| |03|2300|2000| tableB |id|nedan|jitubai| |01|1500|1300| |02|1500|1200| |03|2300|2200| この2つをUNIONALLで結合すると以下のようになると思うのですが、 |id|nedan|jitubai| |01|1000|900| |02|1500|1000| |03|2300|2000| |01|1500|1300| |02|1500|1200| |03|2300|2200| これを何とかして、idを軸にnedanカラム、jitubaiカラムの値を足して出したいのです。以下の感じです。 |id|nedan|jitubai| |01|2500|2200| |02|3000|2300| |03|4600|4200| どうすれば良いのでしょうか……。 何か良い知恵をお借りできれば、と思っています。 宜しくお願い致します。

  • 複数テーブルから全データ取得する際、同カラムあり

    SELECTで複数テーブルから、全カラム値を取得する際、同名カラムがあったとき、指定テーブルの値を取得したいのですが、どうすれば良いでしょうか? ◆前提 ・テーブル「r1」 ・テーブル「t1」 ・テーブル「u1」 ※「r1」「u1」には、同名カラム「z2」あり ◆やりたいこと ・条件一致する全てのデータを取得したい ・但し、「z2」カラムの値は、「r1」テーブルの値を取得したい ◆現状 $sql="SELECT * FROM (`r1`) JOIN `t1` JOIN `u1` ON `r1`.`tid` = `t1`.`tid` And`r1`.`uid` = `u1`.`uid`"; ◆疑問 3つのテーブルから条件一致するデータを全て取得しているのですが、 「r1テーブル」「u1テーブル」に同じカラム名(z2)があるためか、 取得結果のz2内容が、「u1テーブル」の「z2カラム」値となっています(多分…)。 この時、「r1テーブル」の「z2カラム」を取得するには、どうすれば良いでしょうか? (「r1テーブル」の「z2カラム」だけを単独で取得したいわけではなく、「SELECT * 」結果した際の「z2カラム」の値を「r1テーブル」のものにしたいです)

    • ベストアンサー
    • MySQL
  • 値が「1」のカラム名を求めたい。

    任意の列の、値が「1」のカラム名を求めるにはどうしたらいいでしょうか? PHP Version 5.1.6 MySQL - 5.0.45 で運用しています。 そもそものテーブルの作り方がおかしいのかも知れませんが、 以下のようになっています。 このテーブルで、IDが「40」の列の値が「1」のカラム名を求めたいのです。 どの様にしたらいいでしょうか? ※カラム名「会員番号110」は実際は整数になっています。 ID  会員番号110  会員番号111  会員番号112  会員番号113  40  1       1       0       1       41  0       1       1       1   $sql ="select * from `member_sub_tbl` where `ID`='$ID'"; $result = mysql_query($sql, $con); //カラムの数を取得する $numFields = mysql_num_fields($result); for($i=0;$i<$numFields;$i++){ $nameFields[] = mysql_field_name($result, $i); } print_r($nameFields); これで、カラム名は全て配列に入るのですが、値が「1」のと限定する方法がわかりません。 ご教授、よろしくお願いいたします。    

    • ベストアンサー
    • PHP
  • PHPとMySQLで自動取得

    PHPとMySQLでブログを改造しています。今作りたいのはブログの記事を投稿する度にPHPでMySQLにアクセスして文字列を呼び出すというものです。 [例] MySQLのテーブルのカラム1には連番の数字(1~)がはいっていて、カラム2には呼び出したい文字列がはいっています。ちなみに15件のデータがはいっているとします。それで記事を投稿するたびに上から順番に5件ずつ表示したいんです。それで一周したらまた最初からというのが希望です。 どうソースコードを書いていいのか解りません。解る方がいましたら、教えてください。お願いします。

    • ベストアンサー
    • MySQL
  • 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
  • コラムの値からコラム・テーブルを検索

    プライマリキーが様々なテーブルで別の名前で利用されていると、テーブル同士の関連の全てが把握できずに困っています。以前にコラム名からテーブルを検索する方法を質問したのですが、私が扱っているデータベースでは、プライマリキーがシステムの別の場所で少しだけ異なる名前で利用されていることが多いので、その方法では把握できない関連が出てきます。 具体的には、EMPLOYEES__KEYというEMPLOYEESテーブルのプライマリキーがPERSONALIZE_EMPOYEESというテーブルでPSNLZ_EMP__KEYという名前で使われている状況を考えていただきたいと思います。PSNLZ_EMP__KEYのコラムのレコードは全てEMPLOYEES__KEY内のデータからとられているとします。 以前にselect TABLE_NAME from USER_TAB_COLUMNS where COLUMN_NAME = 'EMPLOYEES__KEY' というSQLで特定のコラムを使っているテーブルを全てリストアップできると教えていただいたのですが、今回のケースでは、同じような内容のコラムなのですが名前が異なるため上記のSQLでは検索できないテーブルがある場合、それをどうやってとってきたらよいのかということです。 コラムの値にtaro, jiro, hanakoなどのようにテーブルまたはシステム内でユニークな値が指定されている場合、コラムの値を指定し、「その値が使われているコラム・テーブルを列挙せよ」というような命令を与えればよいのだということまでは分かりますが、どのようにSQLを書けば良いか教えてください。

  • 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文なども理解ができずに苦戦しております… お手数ですが、ご教示の程 よろしくお願い申し上げます。