• 締切済み

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

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

みんなの回答

  • 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