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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

解決済

2回答

2616閲覧

コメント機能の実装 (全てのコメントが表示されてしまう状況について)

yuugo

総合スコア12

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

0クリップ

投稿2019/01/25 03:09

編集2019/01/25 03:22

自分の作っているサービスで
、投稿した写真にコメントする機能をつけたいと思っています。
確かに、投稿した写真にコメントする事はできました。
しかし、どの写真を選んでも同じコメントが表示されてしまいます。
つまり、1の写真にコメントしたはずなのに、2の写真のコメント欄にもそのコメントが反映されてしまっているということです。
分かりづらくてすみません。

以下、説明です。
イメージ説明
こちらの右下のコメント欄の下が投稿したコメントです。
このコメントをコメントした写真にだけ表示するようにしたいのです。
全ての写真に表示したいわけではないです。

SELECT photoposts.*,reply_comment.comment FROM photoposts,reply_comment WHERE photoposts.id=reply_comment.photoposts_id ORDER BY comment DESC;'

テーブル状況

communityテーブル(コミュニティ投稿の為のテーブル)
id
comtitle(コミュニティの名前)
thumimg(コミュニティのサムネイル)
numrest(コミュニティの人数)
date (撮影日)
location(撮影場所)
subject(被写体)
use_camera(主な使用カメラ)
comment(作成者コメント)
member_id
reply_comment_id
created
modified

membersテーブル(ユーザー作成、またログインの為のテーブル)
id
name(メンバーの名前)
email(メールアドレス)
password(パスワード)
picture(プロフィール画像)
created
modified

photopostsテーブル(撮影した写真を投稿するテーブル)
id
photoimg(投稿画像)
photolocation(撮影場所)
photostory(写真に関するストーリー)
belongscom(所属コミュニティ)
use_camera(使用カメラ)
use_lens(使用レンズ)
member_id
reply_comment_id
created
modified

reply_commnetテーブル(コメント機能のテーブル)

id
comment(コメントするカラム)
reply_comment_id
photoposts_id
members_id
created
modified

以下が、このページのphpコードになります。
コメント表示はphotopostsテーブルのidとreply_commentテーブルのphotoposts_idでリレーションを組んでSELECT
する事で実現しようとしました。

説明が下手で本当に申しわけないですが、詳しい方宜しくお願いします。
また、情報が足りない所は遠慮なくいってください。

require('dbconnect.php');//DBに接続

1require('ports/login.php');//ログインス処理の読み込み 2 3//写真投稿のidを取得 4$sth = $db->prepare('SELECT * FROM photoposts WHERE id=?'); 5$sth->execute( 6 array($_GET['id'])//URLから何番目の投稿かを判断 7); 8$photo_id = $sth->fetchAll();//全ての結果を取得 9 10/*コメント投稿機能 */ 11if(!empty($_POST)) {/*コメントエリアが空でなければ */ 12 $reply = $_POST; 13 $insertreply = $db->prepare("INSERT INTO reply_comment (members_id,photoposts_id,comment,created) VALUE (?,?,?,NOW())"); 14 $insertreply->execute(array( 15 $member['id'], 16 $_GET['id'], 17 $reply['comment'] 18)); 19 20header('Location: photo_detail.php?id='.$_GET['id']); 21exit(); 22 23} 24 25//写真投稿の詳細を1件表示するための処理 26//写真作成内容をDBからSELECTで取得 27$photos = $db->prepare('SELECT m.name,m.picture, p.* FROM members 28m, photoposts p WHERE m.id=p.member_id AND p.id=?'); 29$photos->execute(array($_REQUEST['id'])); 30 31//コメントの表示機能 32$comments = $db->query('SELECT photoposts.*,reply_comment.comment FROM photoposts,reply_comment WHERE photoposts.id=reply_comment.photoposts_id ORDER BY comment DESC;'); 33 34

そして、DBをSELECTしたものが以下です。
イメージ説明

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

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

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

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

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

kunai

2019/01/25 03:12

そのSQLは何でしょうか?実際にコード上でSQLを発行している箇所を開示いただけませんか。
Orlofsky

2019/01/25 03:17

質問にテーブル定義はCREATE TABLE文で、数件で良いから各テーブルに入っているデータをINSERT文で、それと肝心のSELECT文も提示されては?
yuugo

2019/01/25 03:23

返信ありがとうございます。 編集しました。
guest

回答2

0

$comments = $db->query('SELECT photoposts.*,reply_comment.comment FROM photoposts,reply_comment WHERE photoposts.id=reply_comment.photoposts_id ORDER BY comment DESC;');

これだとコメントの絞込みまでしてないのでは?
whereにreply_comment.photoposts_id = $_GET["id"]を条件に入れる必要があると思います。

投稿2019/01/25 03:27

m.ts10806

総合スコア80850

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

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

yuugo

2019/01/25 03:38

コメントいただきありがとうございました。 解決しました。
m.ts10806

2019/01/25 03:40

解決されたようで何よりです。 SQLなどプログラミング外の情報を取り扱うときは直接SQLをDBに対して実行してみて欲しい情報が返ってくるのを確認してからプログラムに埋め込むのを強くすすめます。 毎回画面表示確認していては結構なロスになります。
yuugo

2019/01/25 04:05

ありがとうございます。 よく先生にも言われております。 肝に命じておきます。
guest

0

ベストアンサー

直前のSQLではp.id=$_REQUEST['id']を指定しているのに、なぜコメントの時にその発想が抜け落ちたのでしょうか。。

$comments = $db->query('SELECT photoposts.*,reply_comment.comment FROM photoposts,reply_comment WHERE photoposts.id=reply_comment.photoposts_id and photoposts.id=\''.$_REQUEST['id'].'\' ORDER BY comment DESC;');

投稿2019/01/25 03:27

kunai

総合スコア5405

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

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

yuugo

2019/01/25 03:39

解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問