MySQLとPHPで2つ以上のデータベースを使っての出し方

このQ&Aのポイント
  • MySQLとPHPを使用して、2つ以上のデータベースから情報を取得する方法を教えてください。
  • 質問者はデータベース初心者であり、特定のショップに複数の商品を関連付けて表示する方法を知りたいと述べています。
  • 現在のデータベースには、ショップと商品のテーブルがあり、それぞれのテーブルにはコードや商品名が含まれています。
回答を見る
  • ベストアンサー

mysql ,phpで2つ以上のデータベースを使っての出し方

データベース初心者です。よろしくお願いします。 僕のつたない文章力では「お前の言っていることは訳がわからん」と言われてしまうので、要点だけの質問でご勘弁ください。 ・やりたいこと ----------------------------------------------------------- 「スーパーアルプス」で売っているもの  りんご 「クイーンズ伊勢丹」で売っているもの  りんご みかん 「京王ストア」で売っているもの 「肉のハナマサ」で売っているもの 牛肉 牛肉 豚肉 ----------------------------------------------------------- という表し方がしたいです。 「スーパーアルプス」のように、1つのショップに対して1つの商品を出すことはできるのですが、「クイーンズ伊勢丹」のように1つのショップに対して2つ以上の商品を括って出す方法がわかりません。(肉のハナマサのように、同じ商品を2つ以上だすこともできません。。) これらはどのようにデータベースを設計し、どのようにphpを記述したらいいのか教えていただけますと幸いです。 ちなみに、今のデータベースはこんな感じです。 shop ---------------------------------------------------------- shop-id shop 1    スーパーアルプス 2    クイーンズ伊勢丹 3    京王ストア 4    肉のハナマサ ---------------------------------------------------------- shouhin ---------------------------------------------------------- shouhin-id shouhin 1    りんご 2    みかん 3    牛肉 4    豚肉 ---------------------------------------------------------- です。 何かご不備や、もっと詳しく、など ありましたらいつでもおっしゃってください。 ご回答お願いいたします!

  • MySQL
  • 回答数4
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5080/13275)
回答No.4

$sql2 を以下のようにしてみてください(カラム名をバッククオートで囲んでます) ============================== $sql2= "select * from shop,utterumono,shouhin where shop.`shop-id`=utterumono.`shop-id` and utterumono.`shouhin-id`=shouhin.`shouhin-id` and shop.`shop-id` = " . $row["shop-id"]; ============================== SQLでは基本的にカラム名は英数字と"_"(アンダーバー)しか使用できないため"-"(ハイフン)は扱えません。 MySQLでは例外的に"`"(バッククオート)で囲むことでハイフンや日本語等が扱えます。 多分テーブルの作成等にphpMyAdminを使われたのかと思いますが、phpMyAdminは勝手にカラム名等にバッククオートを付けてくれるためハイフンが使えていたのだと思います。 私が自分のところで作った環境は無意識にアンダーバーに置き換えて書いてました。

hasu23
質問者

お礼

で、できました!!!! 感謝です!!何度もご迷惑をおかけしてしまって、またこんなに丁寧に教えていただきまして本当にありがとうございました!! ここで正直1か月くらい止まっていたので、またいろいろ作業が進行できそうです!! 本当にありがとうございました!!!

その他の回答 (3)

  • t_ohta
  • ベストアンサー率38% (5080/13275)
回答No.3

メッセージの内容からするとクエリーの実行に失敗しているようです。 ワーニングが出ているのはどの行でしょうか? 同じ環境を作ってみましたが、私のところでは問題なく表示されました。

hasu23
質問者

お礼

お忙しい中ご返信本当にありがとうございます! もう一度テーブルをすべて作り直してやってみたのですが、ぼくのでは動きませんでした。。。小さなケアレスミスなんでしょうか。。 エラーが出ているといわれるのは 「on line 38」 と「on line 39」です。 僕のエディタ上では、 36→ $sql2= "select * from shop,utterumono,shouhin where shop.shop-id=utterumono.shop-id and utterumono.shouhin-id=shouhin.shouhin-id and shop.shop-id = " . $row["shop-id"]; 37→ $result2 = mysql_query($sql2); 38→ $rows2 = mysql_num_rows($result2); 39→ while($row2 = mysql_fetch_array($result2)){ となっています。 何度もご親切にお答えいただいて、(またわざわざ同じ環境まで作っていただいて)本当に感謝しております! もし何かご助言等ありましたらお時間あるときで構いませんのでよろしくお願いいたします!ありがとうございます!

  • t_ohta
  • ベストアンサー率38% (5080/13275)
回答No.2

1回のクエリーで出すのは難しいでしょう。 まず始めのsqlは $sql = "select * from shop"; だけにして、while のループの中で $sql2= "select * from shop,utterumono,shouhin where shop.shop-id=utterumono.shop-id and utterumono.shouhin-id=shouhin.shouhin-id where shop.shop-id = " . $row["shop-id"]; $result2 = mysql_query($sql2); $rows2 = mysql_num_rows($result2); echo "<p>"; echo $row["shop"]; while($row2 = mysql_fetch_array($result2)){ echo $row["shouhin"]; } echo "</p>"; って感じで回すとご希望のような結果になると思いますよ。

hasu23
質問者

お礼

ご回答本当にありがとうございます!!! t_ohtaさんの回答を使って自分なりに作ってみました。 ただ、これでもエラーが出てしまっています。。 データベース自体のつくりがおかしいかも、と思って見直してみたのですが、データベースはたぶん大丈夫だと思います。 ちなみに、ぼくが書いたのはこんな感じです。 ---------------------------------------------------------------- $sql= "select * from shop"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row["shop"]; $sql2= "select * from shop,utterumono,shouhin where shop.shop-id=utterumono.shop-id and utterumono.shouhin-id=shouhin.shouhin-id and shop.shop-id = " . $row["shop-id"]; $result2 = mysql_query($sql2); $rows2 = mysql_num_rows($result2); while($row2 = mysql_fetch_array($result2)){          echo $row2["shouhin"]; } echo "</p>"; } } ---------------------------------------------------------------- このように作ると、下のようなエラーが出てしまいます。。 スーパーアルプス Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /virtual/******************* Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /virtual/******************* ・ ・ ・ 自分なりにいろいろ試行錯誤してみて、 $sql2= "select * from ~~~ の部分の位置をいろいろ変えてみたのですが、エラーの桁数が増えたり減ったりするだけで正しく表示できませんでした。 2度もご丁寧にお答えいただいて本当に恐縮で、また感謝しております。もしお時間ございまして、解決方法などお分かりになりましたらご教授いただけますと幸いでございます。

  • t_ohta
  • ベストアンサー率38% (5080/13275)
回答No.1

もう一つテーブルを作って utterumono ---------------------------------------------------------- shop-id shouhin-id 1    1 2    1 2    2 4    3 4    3 4    4 ---------------------------------------------------------- みたいな感じでデータを入れて、後は順番に表示するだけじゃないでしょうか。

hasu23
質問者

お礼

ご返信ありがとうございます! 早速作ってやってみました!ただ僕の記述が間違っていると思われ、思うように動きませんでした・・・。こんな感じでphpを書いていますが、どこがおかしいのかよくわかりません。。 ---------------------------------------------------------------- $sql= "select * from shop,utterumono,shouhin where shop.shop-id=utterumono.shop-id and utterumono.shouhin-id=shouhin.shouhin-id"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>"; } else { while($row = mysql_fetch_array($result)){ echo "<p>"; echo $row["shop"]; echo $row["shouhin"]; echo "</p>"; } } ---------------------------------------------------------------- です。特にこのあたりが自分にとってネックというか、見当違いのことをしているのではないかなぁ・・と思います。 もしもお時間ございましたら、このあたりもご回答いただけますと幸いです。よろしくお願いします!

関連するQ&A

  • 食品成分データベースについて

    食品成分データベースというサイトで 肉のハナマサで買った、「牛肩切り落とし、オーストラリア産」(見たところ、脂肪はほとんどなく全部赤身です)は 肉類/うし/[輸入牛肉]/かた/赤肉、生 に該当すると思っていいのでしょうか? 脂肪はほとんどなく、全部赤身の肉です。 ちなみに知恵袋でも質問しましたが、締め切りました。

  • 焼そばの具は牛肉か豚肉か

    いつも焼きそばには牛肉を入れるのですが、昨日初めて豚肉を入れてみました。 同じ肉なのでそんなに味は変わらないだろうと思ってましたが、いざ食べてみると少し臭みがあって牛肉入りより味が落ちるなぁといった感じでした。 みなさんは牛肉、豚肉どちらを使ってますか? またスーパーで売ってる惣菜の焼きそばは牛肉、豚肉どちらが入ってますでしょうか?

  • php print echo クリック

    php初心者のものですがよろしくお願いいたします。 たとえばですが データベースに商品のデーターが3つ入ってたとします。 DBからその3つのデータを取り出し PHPのprint または echoで取り出した商品を並べ それをクリックし商品詳細画面に行きたいのです。 [例] みかん りんご バナナ この みかんやりんごバナナをクリックできるようにしたい。 なにか参考になるソースコードなど教えていただければ幸いです。

    • ベストアンサー
    • PHP
  • 2つのDBからマージした結果をSQLで抽出するには

    ■下記の様な2つのデータベースとデータがあった場合に算出結果の様な形でデータを抽出したいのですが、SQLで実装するにはどうすれば良いでしょうか? データベースはOracleを使用しています。 【データベースA】 担当者  商品 担当者A りんご 担当者B りんご 【データベースB】 担当者  商品 担当者A みかん 担当者C みかん ■算出結果 担当者  商品 担当者A りんご、みかん 担当者B りんご 担当者C みかん

  • 入力規則リスト入力のIF関数

    申し訳ありませんが助けてください。 A    B 1肉    鶏肉 2     豚肉 3     牛肉 4果物  りんご 5     みかん 6     いちご 7野菜  大根 8     にんじん 9     ピーマン 上記のような表をもとに、A10に入力規則で「肉,果物,野菜」のリスト入力をさせます。そしてB10には、A10が肉だったら「鶏肉,豚肉,牛肉」のリスト入力。A10が果物だったら「りんご,みかん,いちご」のリスト入力させたいと思っています。 そのためB10に入力規則をリスト表示にして、元の値に以下の計算式をいれました。 =IF(A10="肉",$B$1:$B$3,IF(A10="果物",$B$4:$B$6,$B$7:$B$9)) 以上のためしで作ってみた計算式はうまくいったのですが、実際業務上のリストはAが15項目あり、ネストの制限によりIF関数を重ねられません。 他にいい方法がないか、お知恵を拝借したいと思います。よろしくお願いいたします。 ※ちなみに、当方マクロの知識がまったくありませんがマクロで解決できるのであれば勉強しますのでよろしくお願いします。

  • お肉について

    豚肉・鶏肉・牛肉などがメジャーなお肉だと思いますが、 まったく料理をしたことない自分にとってはよく区別がわかりません。 たとえば豚肉であってもスーパーで50円くらいで売っている者もあれば高いものもあります。 牛・豚・鳥肉にはそれぞれどのように分かれていて、それぞれどのような調理方法があるのか?というのがわかるサイトなどないでしょうか? なんでもいいので、軽い助言だけでもお待ちしています。

  • お肉の平均的なお値段

    お肉の平均的な値段が知りたいです。私のよく買っているスーパーですと 鶏もも肉・・・100g 99円 鶏むね肉・・・100g 59円 といった感じなのですが、豚肉・牛肉の平均的な値段が分からず 「これは安いのか?」といった感じで購入しています。 あなたの行くスーパーの平均的なお肉(できれば部位など詳しく)の値段を教えてください。

  • 馬肉の入手法

    日本人は世界の色んな料理を食べますよね。しかし、肉に関してはバリエーションに乏しく、牛肉、豚肉、鶏肉以外の肉はあまり食べませんよね。ですから、スーパーなどに行ってもそれ以外の肉はなかなか売っているところが少ないです。 それで、今回お伺いしたいのは馬肉の入手法です。馬肉は牛肉に比べて低脂肪でコレストロールも少ないのに、スタミナが付くと聞きました。 それで、馬肉でステーキや鍋物を作りたいと思うんですが、馬肉はどこから仕入れたらいいでしょうか? お勧めの通販のサイトなどもございましたら教えてください。

  • 肉の中で何が一番安いのか教えて下さい

    一般的なスーパーで売ってる牛肉・豚肉・鳥肉の中で平均で一番安いと思われる肉の種類は何か教えて下さい。 産地や肉のブランドなどによって値段が大きく違うと思いますが気になるので分かる方お願いします。 またその肉の中から特に安い部位も教えていただけると嬉しいです。 例)鳥肉の手羽先

  • こんなすごい肉食べたことあります、という方

    日本で普通に「肉」と言った時に思い浮かべるのは 牛肉 豚肉 鶏肉 あたりですよね。 最近は ラム肉 鴨肉 馬肉 あたりもスーパーでちらほら見かけるようになりましたが、これ以外で「私こんな珍しい・面白い・とにかくすごい肉を食べたことあります!」という方がいらっしゃったら、教えて下さい。どんな味だったかも。 因みに私はワニの肉を食べたことがあります。鶏肉みたいな味でした。 よろしくお願いします。