質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.77%

DBからデータの取得とデータの出力を別のPHPファイルで行いたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,117

score 12

DBからデータを取得するPHPファイルと、取得したデータをアウトプットするPHPファイルに分けてコーディングをしたいと考えています。

例えば、
保険テーブル(保険名、保険ID)
ユーザーテーブル(ユーザー名、保険ランク、保険ナンバー)

保険テーブル
|保険名|保険ID|
|楽々 | 1000|
|得々 | 1001|

ユーザーテーブル
|ユーザ名|保険ランク|保険No|
|  太郎|     1|  000|
|  花子|     1|  001|

このようになっていた場合、
保険ランクと保険ナンバーから保険IDを抽出し、
ユーザー名と保険名を配列に保存したいです。

// SQLクエリ作成
        $sql = 'SELECT 保険テーブル.保険名
        FROM 保険テーブル,ユーザーテーブル
        WHERE ユーザーテーブル.ユーザーランク||ユーザーテーブル.ユーザーナンバー = 保険テーブル保険ID 

このようにして取得できるのかと思ったのですが、うまく取得できません。調べてみると内部結合を使わなくても取れそうな感じがしたのですが、取れないのでしょうか?

また、while文で配列にして保存する部分もよく分かっていないので、取得し、保存する部分もご教授いただけると助かります。(タイトル通り、別のファイルで行いたいので、そのように書いていただけると理解が深まると思われます)

SQLはポスグレを使っています。よろしくお願いします

==========
追記
SQL文がうまく取得できません。欲しいデータとしては、
|保険名|ユーザー名|
| 楽々|   太郎|
| 得々|   花子|

こういうイメージです。欲しいデータを書き忘れてすみません。

命令の実行がうまくいっていないのと、配列にうまく保存できていない(保存のイメージがわかない)のが問題点です。命令が書けていないので配列に入れる段階ではないのですが…

追記
別のPHPファイルで〜〜というタイトルの意味は、
DB.phpでDBから取得する部分を行い、show.phpで取得したデータを表示する作業をしたいという意味です。forやwhileでデータを取得する部分のイメージがうまくできていないので…その部分を教えていただきたいです。

よろしくお願いしますよろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ao_love

    2016/01/15 17:33

    うまく取得できない、という状況の詳細をお願いします。
    エラーでSQLが通らないのか、ほしい情報がないのか、情報はあるけど表示のさせ方が分からない、なのか。
    (そのSQLではおそらく通らないと思いますが…)
    また、最終的に表示させたいものもいまいちよくわからないのでそのあたりの詳細を提示してください。

    キャンセル

回答 1

checkベストアンサー

+2

こんにちは

質問がDBとPHPの話が混同されているようですね。

別のPHPファイルを分けるという点がよくわからないので、一応こんな方法でよいでしょうかという流れです話してみます。

■■■SQLの話
結果として、最後に記述されている内容が出力出来れば良いのかと思います。

SELECT 
 保険テーブル.*,
 ユーザーテーブル.* 
FROM 
 保険テーブル
   LEFT OUTER JOIN ユーザーテーブル ON ユーザーテーブル.保険No= 保険テーブル保険ID 


※動作テストしていないので、こんな感じでと伝わればと。
条件はLEFT OUTER JOIN に記載した、
ユーザの保健NOと保健テーブルのNo(id)をひも付けるだけでいいと思います。

■■■PHPの話

上記SQL分を使用して以下のような形で結果を回して見てはいかがでしょうか。
詳細は参照のURLを閲覧お願いします。
参照: http://php.net/manual/ja/mysqli-result.fetch-assoc.php

$query = "【先ほどのSQL】";
if ($result = $mysqli->query($query)) {
    while ($row = $result->fetch_assoc()) {
        printf ("%s\n", $row);
    }
    $result->free();
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/01/17 17:07

    こんにちは。返信遅れてしまいすみません。
    SQLの方は理解できました。ありがとうございます。

    whileで取得する部分のイメージがどのサイトを見てもわからなかったので、具体的にどうなっているのか教えていただきたいです。(またはサイトの紹介をしていただきたいです。)

    また、別のファイルに分けるという意味の補足をしましたのでそちらをご覧になっていただけると助かります。(まだ何が言いたいかわからないという場合はさらに補足させていただきます。)

    キャンセル

  • 2016/01/18 15:54

    横からのコメント失礼します。
    提示されたDBの構造では、SQL内で||を使っていることから見ても、ユーザの保険Noと保険IDは紐付いておらず、ユーザーランクと保険Noをつなげて初めて保険IDになるのかな?と思っていました。
    ですが、SQLはそれでいい、ということなので格納されているのは直接保険IDなのでしょうか…?
    ※あと、提示されているのがMySQLでのsqlなのでポスグレではそのままでは動かないかと思います。

    PHPを分けることに関しては、あまり意味がないように思えるのですが、運用上必要とかいうことでしょうか?

    キャンセル

  • 2016/01/19 16:15

    コメントありがとうございます。参考にこちらの都合の良いように改変させて使わせていただいたので大丈夫です。ありがとうございます。

    そうですね…そういう指定がある(既存のシステムがそのように動いている)という感じです…

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る