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

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

ただいまの
回答率

87.49%

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

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,805

score -33

【質問編集】

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

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

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

<?php

class Posting
{
    public $id = '';
    public $userid = '';
    public $body = '';

    public function __construct($id, $userid, $body)
    {
        $this ->id = $id;
        $this ->userid = $userid;
        $this ->body = $body;
    }
}
<?php

class User
{
    public $id = '';
    public $name = '';

    public function __construct($id, $name)
    {
        $this ->id = $id;
        $this ->name = $name;
    }
}
CREATE TABLE  `postings` (
 id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 userid int(11) NOT NULL,
 body varchar(1000) NOT NULL,
 time datetime NOT NULL
);
CREATE TABLE  `user` (
 userid INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 name varchar(100) NOT NULL,
 pass varchar(100) NOT NULL
) ;

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

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

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

CREATE TABLE `likes` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `article_id` bigint(20) NOT NULL  DEFAULT '0',
  `user_id` bigint(20) NOT NULL DEFAULT  '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `ix01_likes` (`user_id`,`article_id`),
  KEY `ix02_likes` (`user_id`),
  KEY `ix03_likes` (`article_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ;


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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2018/12/21 10:08

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

    キャンセル

回答 4

+5

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

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

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/21 00:20

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

    キャンセル

  • 2018/12/21 00:40 編集

    君はまず、質問文の質をあげてください。

    > ツイートを表すクラスとして
    >
    > フィールド変数が以下で存在します。
    > $user
    > $body
    > $time

    この部分だって、ここは技術者のQAサイトなんですから、「コード」で示すべき。「ツイートを表すクラス」とは書いてあるけど、どんなクラス名をつけているのかも不明だし、IDもないし。
    クラス名を出さなくてもいい情報と思っているのであれば、その考えは改めるべき。命名のセンスはプログラマの能力に深く関わっている。
    DBにはプライマリーキーとなるIDが、あるかないかというのは非常に重要な情報。IDがあるのに示していないのも問題だし、IDがないのも問題。
    ツッコミどころが多すぎると、詳細な回答をしようとは思いません。

    情報が少ないと、「あなたがどの程度のアドバイスで理解できるのか」が回答者としては予測がつかない。ちょっと教えて理解できる人なのか、理解力がなくて回答するだけ回答者が疲弊してしまう事になるのか…

    キャンセル

  • 2018/12/21 10:11

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

    キャンセル

checkベストアンサー

+2

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/21 10:10

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

    キャンセル

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る