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

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

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

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

PHP

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

Q&A

解決済

2回答

5000閲覧

3テーブルのユーザー情報の紐付けについて教えて下さい。

ssk

総合スコア332

MySQL

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

PHP

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

0グッド

1クリップ

投稿2015/08/24 05:20

編集2015/08/24 05:21

###やりたいこと
ユーザーのコメントに対して、返信する

###できていないこと
返信したユーザー情報の紐付け

テーブル構成はこちらです。

user(テーブル名) -code -user_name -mail -password post(テーブル名) -post_id -code -slug -contents comment(テーブル名) -post_id -code -slug -comment

上記のテーブルの内容を、こちらのSQL文で情報を取得しました。

SQL文

1SELECT * FROM post INNER JOIN user ON post.code = user.code INNER JOIN comment ON post.post_id = comment.post_id WHERE post.slug=? AND comment.slug=?

たしかに、情報は取得できているのですが、

・postテーブルのcodeとuserテーブルのcode(ユーザー名や画像情報)
・commentテーブルのcodeとuserテーブルのcode(ユーザー名や画像情報)

と分けて、情報を取得したいのです。
つまり

投稿したユーザー名さん(code1)の情報
コメント投稿したユーザー名さん(code2)の情報

という形で取得できれば良いのですが、可能でしょうか?

ご教授願いします。

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

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

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

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

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

guest

回答2

0

「どう作りますか?」と言われたら、設計から開始します。
PHPとか言語問わず共通ですね。

イメージ説明
ユースケース図を作るのが一番なのでしょうが、今回ユーザが多く無いのでマインドマップで代用します。
(ログイン画面のイメージも作っておくと良いですね)

イメージ説明
マインドマップで考えた内容を満たすようにDB設計をしていきます。
ざっくりで構いません。ここで100%のものを作っても意味が無いので。

その後、アクティビティ図を書きます。
イメージ説明
割と力尽きてきました。

クラス図を書いていきます。
イメージ説明
だいぶ適当ですね。本当はもっとしっかり書いていきます。

後は画面設計がありますが、私はデザインセンスがないので今回は省いています。
実際はマインドマップのあたりで画面設計してます。

仕事なら、クラス図を元に詳細設計を書くかもしれないですが、プライベートなら書きません。
そのままソースコード書いちゃうと思います。

私達の仕事は、計画・設計がものすごいウェイトを占めています。
逆に、この情報無しに「作れ」と言われてもおそらく作れません。もちろん、この手順は【理想】です。
現実は、最初からコード書けって言われるかもしれませんが、頭の中でこれらのことが組み立てられるようにならないといけないです。

…おそらく、望む回答ではないでしょう。
sskさんは部品の作り方を知りたいのでしょうが、残念ながら、「どの画面のどの部品」を作って欲しいのかわからないと、私もわからないのです。(リレーションもわからないし)

この回答は参考程度に見てください。

投稿2015/08/25 11:53

編集2015/08/25 12:08
anonymouskawa

総合スコア856

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

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

ssk

2015/08/25 12:32

anonymouskawaさん 至れり尽くせりです><ありがとうございます! お陰様で自分のやりたいことができそうです。 次回からは、計画・設計、、もっと詰めないとダメですね。。 本当に助かりました><
guest

0

ベストアンサー

SQL

1SELECT * 2FROM post 3INNER JOIN USER ON post.code = user.code 4INNER JOIN COMMENT ON post.post_id = comment.post_id 5INNER JOIN USER user2 ON comment.code = user2.code 6WHERE post.slug=? AND comment.slug=?

こういうことでしょうか?

投稿2015/08/24 05:48

anonymouskawa

総合スコア856

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

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

ssk

2015/08/24 05:55

ご回答ありがとうございます。 早速、試してみたのですが、bool(false)が返されてしまいました。 INNER JOIN USER user2 ON comment.code = user2.code ↑user2とすると、コメント(返信)しているユーザ情報が取れるということでしょうか?
anonymouskawa

2015/08/24 06:21

MySQLのクライアントから直接SQLを書いて実行しましたが、 こちらではエラーは起きていません。 バージョンはMySQL5.6.19です。 user2としたのは別名をつけただけで、user2でなくても構いません。 user2と別名を付けられたUSERテーブルは、commentのcodeと一致するものしか返しません。 POSTテーブルと結合しているUSERテーブルとは別のユーザー情報になります。
ssk

2015/08/24 06:28

ありがとうございます。 初歩的な質問で申し訳ございません。。 INNER JOIN USER user2 ↑こうすることで架空のuserテーブル(user2テーブル)が作れるということでしょうか?
anonymouskawa

2015/08/24 06:37

テーブルは、別名をつけることで2つ以上同じものを結合することができます。 なので、user2テーブルはUSERテーブルであって、架空では無いですが…。 一番上のJOINしたUSERテーブルをuser1と別名をつけて考えた方が良いかもしれないですね。
ssk

2015/08/25 03:13

理解できました。ありがとうございます。 エラーは表示されなくなったのですが、 SELECT user.user_name,user2.user_name ↑として、2つのuser_nameを取得することはできないのでしょうか? 取得している値が1つしかなく、困っています。
ssk

2015/08/25 04:23

SELECT user.user_name,user2.user_name as comment_user_name で取得することができました。名前を変更するのですね。 もう1つ質問したいのですが、分かるようでしたら教えて下さると助かります。 【質問内容】 今、コメントの数だけ投稿が表示されるようになっています。(投稿の数は8個あるのですが、実際に表示されているのはコメントの数5が表示されています。)それを、投稿の数8個を表示し、各投稿へのコメントをループで回すには、どのように考えれば良いのでしょうか? 新しい、質問として投稿するべきかもしれませんが><
anonymouskawa

2015/08/25 04:51

INNNER JOINを使っているので、postテーブル、commentテーブル(実際はuserテーブルもですが)が条件で合致するものしか取得できないので、commentのついていないpostが取得できないのです。 ですので、commentテーブルとの結合を、LEFT OUTER JOINにすれば、commentがついていないpostでも、全部表示されると思います。 でも、自分が過去に業務で似たような掲示板を作った時は、postはpostで取得して、commentはpostのidを基準に取得して、javaのほうで表示を組み立てていました。 そうしないと、postとcommentの関係が1:nの場合、postの情報がcommentの数だけ余分に取れてしまうからです。
ssk

2015/08/25 05:48

詳しくありがとうございます。そうですか。。javaですか>< javaはかじったこともないので、現時点での私のレベルではやりたいことはできなそうですか?
anonymouskawa

2015/08/25 06:02

いえ、javaもPHPも掲示板を作るという目的に対して「できない」ということはないです。 機能を洗い出して、個別に見れば「いけるいける」ってなりますよ。 まだ、色々なことを考えて自分で手を動かして、「どうしたら動く」「どうしたら動かない」を沢山経験することが大事だと思います。 特に「動かない」「エラーが起きた」は怖がらず経験して下さい。 そして、それを一つ一つクリアして下さい。 焦っても良いこと無いですし、勉強中なのに「未熟で」と臆することも無いですよ。
ssk

2015/08/25 06:20

ありがとうございます。 PHPだけでも、できるのですか>< はい、本と向き合っての勉強だけだったので、実務経験ある方のアドバイスは本当にためになります。もっと、経験して考えてトライアンドエラーを繰り返します。 ざっくりとでよいのですが、anonymouskawaさんの場合だと、僕のやりたいことはPHPでどのように書くか教えていただけませんか?><
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問