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

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

新規登録して質問してみよう
ただいま回答率
85.48%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

3256閲覧

情報に対して、紐付けをしてコメント投稿の表示をできるようにしたい

退会済みユーザー

退会済みユーザー

総合スコア0

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2016/12/29 08:49

編集2016/12/29 08:55

現在データベースcommentに埋め込んだコメントを、データベースproductの情報に紐付けて表示させるようにさせたいのですが、行き詰まっております。

現在情報・コメントを表示させる画面のファイルには、

//情報(情報の方は既に出力はできております。)// <div class="post"> <?php $pdo=new PDO('mysql:host=******;dbname=******;charset=utf8','******','******'); $sql=$pdo ->prepare('select * from product where id=?'); $sql->execute([$_REQUEST['id']]); foreach ($sql->fetchAll() as $row) { echo '<p>id :', $row['id'], '</p>'; echo '<p>name:', $row['name'], '</p>'; echo '<p>content:', $row['content'], '</p>'; echo '<input type="hidden" name="id" value="', $row['id'],'">'; echo '<input type="hidden" name="name" value="', $row['name'],'">'; echo '<input type="hidden" name="subject" value="', $row['subject'],'">'; } ?> //コメント表示// <?php foreach ($post['comments'] as $comment) { ?> <div class="comment"> <h3><?php echo $comment['name'] ?></h3> <p><?php echo nl2br($comment['content']) ?></p> </div> <?php } ?> </div>

このように書いております。

そして、動きの方のファイルでは、

<?php $pdo=new PDO('mysql:host=******;dbname=******;charset=utf8','******','******'); $st = $pdo->query("SELECT * FROM product ORDER BY id DESC"); $posts = $st->fetchAll(); $st = $pdo->query("SELECT * FROM comment WHERE product_id={$posts['id']} ORDER BY id DESC"); $posts['comments'] = $st->fetchAll(); require '*****.php'; ?>

このように書いております。

そして、
データベースproductの方に
id name contentの情報がいくつか存在していて、
データベースcommentの方には、
no product_id name contentがいくつか存在しております。

これを
データベースproductのid とデータベースcommentのproduct_idで紐付けて、
productの情報に対して、commentのコメントが表示されるようにしたいのですが、どうすればよいでしょうか?
教えてください。

###例
product
id name content
1 A abacd
2 B efghi
3 C jk

comment
no product_id name content
1 2 H zxcv
2 1 F mnbbv

⬇︎

【情報】
*** **** ******
1 A abacd
[コメント]
Fさん
mnbbv


という形です。

ご回答の方よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

popobot

2016/12/29 10:04

2つあるコードの関連性がよくわかりません。なぜ動きの方のファイルの方ではproductを全件取得しているのでしょうか
motuo

2016/12/29 14:04

回答を編集しました。
guest

回答1

0

ベストアンサー

php内でidを判定しながら取得するのも手ですが、SQLで外部結合を使ってみては如何でしょうか?

sql

1SELECT * FROM product 2LEFT OUTER JOIN comment ON product.id = comment.product_id   3ORDER BY id DESC

これであれば、productのidとcommentのproduct_idを結び付けて1レコードとして取得できると思います。

###追記

php

1$st = $pdo->query("SELECT * FROM product 2LEFT OUTER JOIN comment ON product.id = comment.product_id   3ORDER BY id DESC"); 4$posts = $st->fetchAll(); 5``` 6この$postsの内容は下記の様になると思います。 7 8id |productname |productcontent |product_id  |pcommentname |commentoのcontent 9********************* 103 |C |jk |null |null |null 112 |B |efghi |2 |H |zxcv 121 |A |abacd |1 |F |mnbbv 13 14なので、この配列を使って画面表示してあげれば良いと思います。

投稿2016/12/29 11:32

編集2016/12/29 14:02
motuo

総合スコア3027

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/12/29 12:16 編集

ご回答ありがとうございます。 この場合ですと、phpファイルの方にはなんと書けばよろしいでしょうか? 質問ばかりで申し訳ございません。
motuo

2016/12/29 14:04

回答を編集しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問