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

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

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

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

SQL

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

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

Q&A

1回答

2420閲覧

laravel eloquentのgroupby後のcountが行いたい

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

SQL

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

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

0グッド

0クリップ

投稿2022/05/24 03:54

前提

Laravel 8
MySQLで開発しています。

実現したいこと

テーブルのcreated_atでユニーク(Groupby)を行い
ユニークした後に、日付の表記を変えて再度ユニーク、

やりたいこととしては、同月に同じユーザから2度送信されていないかを確認したいです。
※1度の送信で複数件送ることは可能

以下のテーブルのid「1~3」と「4」とで、
同月に計2回送信されたことを検知したい形です。

試したこと

以下のテーブルから、

iduser_idnumbercreated_at
1812021-04-14 00:00:00
2822021-04-14 00:00:00
3832021-04-14 00:00:00
4812021-04-25 00:00:00
5812021-05-01 00:00:00
6822021-05-01 00:00:00
7812021-06-20 00:00:00
$hoge = Hogehoge::select('user_id', 'created_at') ->where('user_id', '=', '8') ->groupBy('user_id', 'created_at') ->get();

こちらを行い、
日付でユニークし、numberの重複を省くことには成功しましたが、
その後、selectRaw('DATE_FORMAT(created_at, "%Y/%m") as year_month')などで、
再度Groupbyを行いたいのですが、created_atのselectが残ってしまいうまくいきません。

どうかよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

Hogehoge::selectRaw('count(id) as cnt, year(created_at), month(created_at), user_id') ->groupByRaw('year(created_at), month(created_at), user_id') ->get();

投稿2022/05/24 07:32

編集2022/05/24 07:33
phper.k

総合スコア3923

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

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

退会済みユーザー

退会済みユーザー

2022/05/24 08:20

回答ありがとうございます。 頂いたコードでテストしますと、日付は月でユニークが取れるのですが、 今度はNumberが残ってしまいます。 質問記載のテーブルを例にすると、4月のcntが4になっておりまして、 ここのcntが2になれば、重複を確認できるのですが、、 引き続き調査を行います。わかり次第ここに書き込みます。 ▼期待する結果 >4月:cnt2 >5月:cnt1 >6月:cnt1
退会済みユーザー

退会済みユーザー

2022/05/24 08:22

追記の情報としまして、Numberを1に絞ればいいという意見が出そうなのですが、 当初の設計を誤ってしまい、Number2だけの送信というものが混在しているため、 現在Numberを無視した日付(年月ユニーク)のみのカウントが行いたい次第です。
phper.k

2022/05/24 08:44

要件に合わせてそれくらいは調整してください。
phper.k

2022/05/24 08:45

もしくは、サンプルで提示したデータの場合、どういう結果を求めたいのかを具体的に聞いてください。
退会済みユーザー

退会済みユーザー

2022/05/24 08:52

先ほどあえて言わずにいましたが、質問をよく読んでください。
phper.k

2022/05/24 10:08

正確にやりたいことを伝える文章書けよ
phper.k

2022/05/24 10:26 編集

「以下のテーブルのid「1~3」と「4」とで、 同月に計2回送信されたことを検知したい形です。」 これをなぜ2とカウントするのかの説明がないと、4とすべきところを2と間違って入力したのかなぐらいにしか思わん
退会済みユーザー

退会済みユーザー

2022/05/24 12:30

もうわかってますよね。 引き返せない気持ちもわかりますが。誤字かな?は流石に見ていて苦しいです。
phper.k

2022/05/24 12:38

悪態つくくらいならご自身でがんばってね
退会済みユーザー

退会済みユーザー

2022/05/24 12:42

いえ、回答はありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問