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

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

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

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

SQL

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

675閲覧

Laravel5で生のSQLを直接実行する方法

sheckwes

総合スコア13

MySQL

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

SQL

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2020/02/05 11:02

編集2020/02/05 11:03

##実現したいこと

users tableに紐づくticketsテーブルがあります。

テーブル:tickets
カラム:id, user_id, payment_id

payment_idがnullのレコードとそうじゃないレコードが混ざっているのですが
payment_idがnot nullのレコードしかないticketsに紐づくuserを取得したいです。
わかりづらくてすみません。。

tickets table
id user_id payment_id
1 1 1
2 1 2
3 1 null
4 2 3
5 2 3
6 2 3

この場合だとidが2のuserだけを取得したいです。

##現在のコード
payment_idがnullのレコードが0のものだけを取得しようとしています。

php

1$users = User::leftJoin('tickets', function($join) { 2 $join->on('tickets.user_id', '=', 'users.id'); 3 }); 4 5$users = $users 6 ->select('users.id', DB::raw("count(salon_tickets.id) as tickets WHERE salon_tickets.payment_id IS NULL")) 7 ->havingRaw('count(salon_tickets.id) >= 0') 8 ->whereNotNull('salon_tickets.id');

##現在出ているエラー
WHERE salon_tickets.payment_id IS NULLのところでsyntax errorになっています。

ご教示いただけると幸いです。

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

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

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

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

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

m.ts10806

2020/02/05 11:34

生のSQLじゃなくてもできそうに思いますけど、どうしてもということですよね。 ただ、どう見ても生のSQLになってないですけど・・・。 ちなみに、きちんと通るSQLは作れてるんですよね?
sheckwes

2020/02/05 11:42

生のsqlじゃないとできないのかなと思ったので。。。
m.ts10806

2020/02/05 11:46

でも結局havingRawとかwhereNotNullとかLaravelの機能使ってるようですけど。ちょっと方針がよくわかりません。
guest

回答2

0

ベストアンサー

joinせずに2回に分けて処理した方がいいのでは?

$unpaid_users = Ticket::whereNull('payment_id')->get(); User::whereNotIn('id', $unpaid_users->pluck('user_id'))->get();

投稿2020/02/05 12:03

mikkame

総合スコア5036

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

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

sheckwes

2020/02/06 01:42

ありがとうございました! このアイディアが思い浮かばなかったので大変助かりました!
guest

0

laravelはちょっとわからないですが普通に書くとこう

SQL

1select user_id from tickets 2group by user_id 3having sum(payment_id is null)=0

投稿2020/02/05 11:11

yambejp

総合スコア116724

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

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

sheckwes

2020/02/06 01:43

ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問