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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

4回答

1029閲覧

PHPと SQLによるいいね機能の追加

Chandler_Bing

総合スコア673

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

1グッド

0クリップ

投稿2018/12/20 14:20

編集2018/12/21 08:14

【質問編集】

以前の質問が不十分過ぎましたのでもう一度質問させていただきます。

★現在作成中のSNSサイトについて
相互フォローのユーザーのみ投稿を閲覧できる。
いいね、いいねの解除ができる。
FBと同じ友達かも機能
FBと同じ共通の友達機能

ザックいりとはこのような感じです。ここでの質問に関係しているのは上の二つ(特にいいね)です。

PHP

1<?php 2 3class Posting 4{ 5 public $id = ''; 6 public $userid = ''; 7 public $body = ''; 8 9 public function __construct($id, $userid, $body) 10 { 11 $this ->id = $id; 12 $this ->userid = $userid; 13 $this ->body = $body; 14 } 15} 16

PHP

1<?php 2 3class User 4{ 5 public $id = ''; 6 public $name = ''; 7 8 public function __construct($id, $name) 9 { 10 $this ->id = $id; 11 $this ->name = $name; 12 } 13} 14

SQL

1CREATE TABLE `postings` ( 2 id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 userid int(11) NOT NULL, 4 body varchar(1000) NOT NULL, 5 time datetime NOT NULL 6);

SQL

1CREATE TABLE `user` ( 2 userid INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 3 name varchar(100) NOT NULL, 4 pass varchar(100) NOT NULL 5) ;

これらが関係しているSQLテーブルとオブジェクトのクラスです。

質問❶
今いいね、いいね解除追加のためにpostingsテーブルにいいねのの数を保存するlikeカラム(いいねで数が増え、解除で数がへる)と
誰がいいねしたのかを把握するカラムを追加しようと考えていたのですが、

以下のようなlikeテーブルを作った方が得策でしょうか。

SQL

1CREATE TABLE `likes` ( 2 `id` bigint(20) NOT NULL AUTO_INCREMENT, 3 `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 4 `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 5 `article_id` bigint(20) NOT NULL DEFAULT '0', 6 `user_id` bigint(20) NOT NULL DEFAULT '0', 7 PRIMARY KEY (`id`), 8 UNIQUE KEY `ix01_likes` (`user_id`,`article_id`), 9 KEY `ix02_likes` (`user_id`), 10 KEY `ix03_likes` (`article_id`) 11) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ;

質問❷
又この場合、created_atとupdated_atの違いはなんでしょうか。

質問❸
created_atとupdated_at にそれぞれプライマリーキーがついていますが、
これは(1,3),(2,4),(4,2),(3,1)という値があった場合、数字の組み合わせがキーであると考えていいですか。

bochan2👍を押しています

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

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

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

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

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

m.ts10806

2018/12/21 01:08

この内容だけでは的確な回答は不可能です。質問サイトでちょっと聞いてみるというレベルではありません。 まずはご自身の設計や詳細の仕様を提示してください。決まっていないのでしたら詰めてください。 質問の仕方を指摘されていますね。「どうですか」だと「Yes/No」くらいしか返って来ません。 何が聞きたいのかを明確にする必要があります。そして、それは「質問テンプレート」を使うことである程度補完できるものです。 同じような形で質問されて、欲しい回答が得られると思いますか? 質問は編集できるので、なるべく質問テンプレートを利用し、質問を再編してください。
guest

回答4

0

耳の痛い話になるかもしれませんが、長文失礼します。

プログラミング、ナメてますよね。
SNSくらい簡単に作れると取り掛かったものの、
わからないことだらけでこんなところで質問の繰り返し。
そんなスキルでつくれるのでしょうか。

要件定義、上流設計って言葉、知ってますか。
要件定義だけでも一冊本が書けるだけの世界ですが、
どういうシステムを作ろうとするのかを第三者にも誤解なくわかりやすく説明できるだけの
イメージを膨らませてドキュメント化するのですが、
やってないですよね。
行き当たりばったり感を感じます。
マネして作るんだからイメージはあるのかもしれませんが、
既存の仕組みがどうやって作られているかの想像力もなく作ろうとしたってダメです。
想像して仮説を立て、それを検証するテストプログラムを書いて評価する、の繰り返しです。
要件定義がしっかりしていないと、
その後の設計もグラグラで作りながらやり直しが頻繁に発生して疲弊してしまいます。

要件定義、上流設計において使われる一手法としてUMLがあります。
よく聞くUMLって何? - Qiita
これをぜひ学んでいただきたい。
システム開発する上で第三者にも伝わる方法でまとめて一緒に考えてもらえる、
明瞭化できる方法です。
UMLを模造紙にでも手書きしてもいいんですが、
astah* community | UMLモデリングツール | Astah
エンジニアのための無料で使えるドローイングツールまとめ | DevelopersIO
ツールやサービスを使っても良いです。

開発の手法も様々で例えば
アジャイル開発とは | 他のソフトウェア開発手法との比較・違い・メリット - 開発 | ボクシルマガジン
こちらの記事にもあるようにウォーターフォール型、プロトタイプ型、スパイラル型などもあります。
設計と実装と評価検証をどう進めていくか参考になさってください。

迷いなく不備なく設計して実装できるようお祈り申し上げます。

投稿2018/12/21 01:01

編集2018/12/21 01:21
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

カラムを追加し、データベースに保存するというやり方が適切だと思うのですがどうですか。

考えうる実装としては、やってはいけないパターンだと思います。

投稿2018/12/20 15:06

terminator

総合スコア266

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

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

Chandler_Bing

2018/12/20 15:20

ありがとうございます。 ではどうすべかですか。
terminator

2018/12/20 15:59 編集

君はまず、質問文の質をあげてください。 > ツイートを表すクラスとして > > フィールド変数が以下で存在します。 > $user > $body > $time この部分だって、ここは技術者のQAサイトなんですから、「コード」で示すべき。「ツイートを表すクラス」とは書いてあるけど、どんなクラス名をつけているのかも不明だし、IDもないし。 クラス名を出さなくてもいい情報と思っているのであれば、その考えは改めるべき。命名のセンスはプログラマの能力に深く関わっている。 DBにはプライマリーキーとなるIDが、あるかないかというのは非常に重要な情報。IDがあるのに示していないのも問題だし、IDがないのも問題。 ツッコミどころが多すぎると、詳細な回答をしようとは思いません。 情報が少ないと、「あなたがどの程度のアドバイスで理解できるのか」が回答者としては予測がつかない。ちょっと教えて理解できる人なのか、理解力がなくて回答するだけ回答者が疲弊してしまう事になるのか…
m.ts10806

2018/12/21 01:11

私は下記だと思います。 > 理解力がなくて回答するだけ回答者が疲弊してしまう事になるのか…
guest

0

ベストアンサー

文書テーブルとユーザーテーブルがあるならそれを紐付ける中間テーブルをつくれば良いでしょう。

そんなことより、質問中の案件を理解・解決しないまま次に進んでほんとに大丈夫なのですか?

投稿2018/12/21 01:46

yambejp

総合スコア114839

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

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

0

フレームワークがわからないのでざっくり。

ツイートクラスにはUserクラスの配列を新たに$wholikedとして持てばよいと思います。
DBはフレームワークがなんとかしてくれると思いますが、MySQLなら概念的には、ツイートのidとユーザのidを持つ連結用の中間テーブルができます。

投稿2018/12/20 20:57

編集2018/12/20 20:58
papinianus

総合スコア12705

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

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

m.ts10806

2018/12/21 01:10

過去質問から、そもそもフレームワーク利用しているようには思えないんですよね・・。 思いつきで作っていて設計部分で破綻してそうなのでフレームワーク使っていたとして、どうしようもなさそうですけど。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問