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

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

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

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

Q&A

解決済

4回答

709閲覧

これはデータベースに情報を登録できていないということでしょうか?

higa_yomityu

総合スコア41

MySQL

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

0グッド

0クリップ

投稿2020/10/10 12:40

編集2020/10/10 13:44

データベースについて質問です。

現在、Twitterの簡易版を作っており
membersというテーブルとpostsというテーブルを二つ作成し、

membersテーブルには登録車情報
postsテーブルには投稿内容
を保存しております。

登録者の情報内容を使って誰が投稿したのかを分かりたいのですが、
membersテーブルとpostsテーブルでidが違っている状況です。

INSERT分を使っています。

if(!empty($_POST)){ if($_POST['message'] !==''){ $message = $db->prepare('INSERT INTO posts SET member_id=?,message=?,created=NOW()'); $message->execute(array( $member['id'], $_POST['message'] )); }

1.membersテーブル
![イメージ説明]
2.postsテーブル
イメージ説明

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

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

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

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

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

guest

回答4

0

ベストアンサー

登録者の情報内容を使って誰が投稿したのかを分かりたいのですが、

membersテーブルとpostsテーブルでidが違っている状況です。

何を持って違うといっているのかわかりませんが、それは想定された動作です。
idは一意のものとなりますので、複数あってはいけません。

おそらく行いたい事はリレーションなのではないでしょうか。
postsテーブルではユーザのidを紐付けるのがmember_idカラムになります。

またこの時
membersテーブルとpostsテーブルはテーブルは1対多の関係になります。

ER図ではないですが、表でも理解しやすくなると思います。ここでいう黄色で塗り潰されているところがリレーションとして紐づいています。

イメージ説明

蛇足

一般的にはメンバーという意味だとまた違ってくるのでuser_idというカラムでテーブルはusersテーブルの方が適切かと思います。
おそらくもう一度構造を考え直す必要があると思います。

投稿2020/10/10 13:47

編集2020/10/10 14:33
kai0310

総合スコア2076

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

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

takutakuya

2020/10/10 13:52

たぶん、member_idがユーザーのidな気がする
kai0310

2020/10/10 13:54

修正します
takutakuya

2020/10/10 14:07

postsテーブルにmember_idあるし。。。
higa_yomityu

2020/10/10 14:10

>postsテーブルにmember_idあるし。。。 構造には問題ないという意味でしょうか?
kai0310

2020/10/10 14:12

memberテーブルのidと紐付けされていなかったため、紐付けするためのカラムを作成してくださいという意味と1対多の関係であることを伝える趣旨だったのですが問題ありますか?
tu789

2020/10/10 14:14

> postsテーブルにmember_idあるし。。。 postsテーブルにmember_idがあってもそれを使っている意味やその構造を理解してないと判断しての回答ではないでしょうか。
takutakuya

2020/10/10 14:14

membersテーブルのidを入れるためにpostsテーブルにmember_idカラムが既にあるんだから、今のままでいいんじゃない?
takutakuya

2020/10/10 14:16

> postsテーブルにmember_idがあってもそれを使っている意味やその構造を理解してないと判断しての回答ではないでしょうか。 どう判断したかは分からないけど、member_idカラムが既にあるのに、member_idカラムを作成してくださいって、混乱するやろw
tu789

2020/10/10 14:17

> membersテーブルのidを入れるためにpostsテーブルにmember_idカラムが既にあるんだから、今のままでいいんじゃない? 横から失礼。membersテーブルのidを入れるためにpostsテーブルにmember_idカラムが既にあると言っても質問者のコードも見る限り少なくともmembersテーブルのidには入っていませんよね。それからその様な設計ではないのかと思いますよ。
takutakuya

2020/10/10 14:19

> 構造には問題ないという意味でしょうか? カラムは今のままでいいと思うよ。 ただ、member_idの外部キーとして、memberテーブルのidカラムを設定したほうがいいとか、その辺がどうなってるか分からないので、分かればアドバイスできると思います。 でもpostsテーブルに追加できないって問題とは関係ないかな。
takutakuya

2020/10/10 14:25

> 横から失礼。membersテーブルのidを入れるためにpostsテーブルにmember_idカラムが既にあると言っても質問者のコードも見る限り少なくともmembersテーブルのidには入っていませんよね。それからその様な設計ではないのかと思いますよ。 推測だけど、 $member['id'] これがmembersテーブルのidなのでは???
higa_yomityu

2020/10/10 14:31 編集

>推測だけど、 $member['id'] これがmembersテーブルのidなのでは?? そのつもりでコードかきまちた! $member['id'], $_POST['message'] ↑ここで誰がどのような投稿したのかを表示したいです。
guest

0

membersテーブルのidとpostsテーブルのmember_idが連携できていれば、OKだと思いますよ。

あああああ を投稿した人が比嘉さんであれば、正常に機能しているはずです。

投稿2020/10/10 12:58

takutakuya

総合スコア979

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

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

higa_yomityu

2020/10/10 13:00

ありがとうございます。 でしたら、追加で投稿できないのはid以外に問題があるということでしょうか?
takutakuya

2020/10/10 13:16

id以外に問題がある可能性が高いと思います。
higa_yomityu

2020/10/10 13:24

ありがとうございます。 挑戦してみます。
higa_yomityu

2020/10/10 13:26

追加で質問失礼します。 postsテーブルのidが0になっているのは何か理由があるのでしょうか?
takutakuya

2020/10/10 13:37

分かりません。 データベースは何を使われているのでしょうか? 各回答にいろいろ異なる質問をされていますが、元の質問自体を編集して、情報を追記されたほうが良いと思います。
kai0310

2020/10/10 13:38

タグや添付画像からわかる様にMySQLだと思いますが・
takutakuya

2020/10/10 13:43

添付画像って何の画像なんですかね??? あと、タグはけっこう間違えて付けてる方が多いので、確認したほうが良いですよ〜
kai0310

2020/10/10 13:48

phpMyAdminのことです。
takutakuya

2020/10/10 13:50

phpMyAdminってこんなんだしたっけ? 使わないんで、分かりませんでした。
higa_yomityu

2020/10/10 14:00

タグ、間違えてましたか! 申し訳ございません。
takutakuya

2020/10/10 14:03

いや、あってるっぽいw ごめんなさい。
guest

0

postテーブルのINSERT文にidを指定していないですか?
INSERT文を出すのが難しければ、エラーを教えてもらえると、回答がしやすいと思います。

投稿2020/10/10 13:20

yshima1129

総合スコア179

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

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

higa_yomityu

2020/10/10 13:22

こちらがINSERT分になります。 ご教授ください。 if(!empty($_POST)){ if($_POST['message'] !==''){ $message = $db->prepare('INSERT INTO posts SET member_id=?,message=?,created=NOW()'); $message->execute(array( $member['id'], $_POST['message'] )); }
kai0310

2020/10/10 13:28 編集

> postテーブルのINSERT文にidを指定していないですか? idは指定する必要がないかと思いますが。
yshima1129

2020/10/10 13:30 編集

失礼しました。書いていましたね。 INSERT文ではわからなかった^^; エラーも知りたいなー
higa_yomityu

2020/10/10 13:35

エラーがコード内やローカル上に出てきていないです。
kai0310

2020/10/10 13:37

> INSERT文ではわからなかった^^; 一般的にPKにしてるならそれだけでわかることかと思います。 > エラーがコード内やローカル上に出てきていないです。 エラー表示の設定をしてないだけでは?
yshima1129

2020/10/10 13:42

わからんなー そもそもPKの設定もどうなっているか分らんし・・・PKあるかもわからんし
higa_yomityu

2020/10/10 13:57

すみません。プライマリーキーは設定していないと思います。 設定する必要はあるのでしょうか?
kai0310

2020/10/10 13:59

データベース構造がわかる様にマイグレーションファイルなりSQL文なり提示してください。
takutakuya

2020/10/10 14:01

テーブルどうやって作ったの?とかその辺の情報もあると良いかもね。 idって普通はauto_increment(DB側が勝手に連番を割り振る)に設定するけど、それだと0はおかしいので。
yshima1129

2020/10/10 14:02

member_idがユニークに設定されている可能性もあるでしょう。 DB設計から見直すのがいいと思います。 エラーの表示はトラブルシューティングで必須なので、この機会にエラーが出るように設定を検討してみてはどうでしょうか? プライマリキーは設定したほうが良いケースがほとんどですので、そのあたりも調べつつ、考えていくといいかと思います。
yshima1129

2020/10/10 14:03

>それだと0はおかしいので。 ですね
higa_yomityu

2020/10/10 14:12

>エラーの表示はトラブルシューティングで必須 一度見直しをしてみます。 >プライマリキーは設定したほうが良い 調べながら挑戦し見ます。
guest

0

membersテーブルとpostsテーブルでidが違っている状況です。

テーブルが違えばIDが異なるのは当然です。
IDはIdentifierという意味で、同じグループ内(この場合はテーブル内)で個別の値を識別するためのものです。

ここで迷うのは、例えば「部署のID」と「職員のID」は同じじゃないのか?と言っているようなものです。

投稿2020/10/10 12:52

gentaro

総合スコア8947

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

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

higa_yomityu

2020/10/10 12:58

違って当然ということなのですね。間抜けな質問して申し訳ないです。 ここで一つ疑問なのが、追加で投稿できないのはid以外に問題があるということで間違いないでしょうか?
gentaro

2020/10/10 13:02

その質問をしたいのであれば、どのような方法でレコードを追加しようとしているのかの説明をするべきです。 SQLを発行しているのか、何らかのツールを使っているのか、ツールを使っているのであればその名称やバージョン、どのような操作を行ったのか、など。
higa_yomityu

2020/10/10 13:12

INSERT分を使ってレコードを追加しようとしています。 解釈が間違っていなければ postsテーブルのmember_id=4をSETして投稿の追加(レコード)を追加しようとしています。 よろしくお願いします。
gentaro

2020/10/10 13:12

そのINSERT文を質問文に追記してください。
higa_yomityu

2020/10/10 13:17

すみません。こちらになります。 if(!empty($_POST)){ if($_POST['message'] !==''){ $message = $db->prepare('INSERT INTO posts SET member_id=?,message=?,created=NOW()'); $message->execute(array( $member['id'], $_POST['message'] )); }
gentaro

2020/10/10 13:30

そのクエリに具体的にどんなパラメータを渡して実行しているのかが問題です。 あと、質問文の不備に対する言及なので、ここにコメントするのではなく、質問文を修正してください。 テーブル間のリレージョンがどうなっているのか、というのも書いてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問