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

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

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

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

PHP

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

Laravel 5

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

Q&A

解決済

1回答

339閲覧

1対多関係で指定した値を多側テーブルに持つ一側テーブルの要素を除く方法

wag52

総合スコア7

MySQL

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

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2018/06/11 03:39

編集2018/06/11 03:46

背景

エンジニア初心者です。
社内であるプロジェクトを引き継いだのですが、ある検索画面にてバグを発見しました。
しかし現状のテーブル構成で適切な動きをするためにはどうすれば良いかわからなかったため、質問させて頂きました。
やりたいことはタイトルにある通り
「1対多の関係にあるテーブルで、多側テーブルのある値を指定し、それを持つ一側テーブルの要素を除いた結果を返す」
というものです。

環境はlaravel 5.4 + Mysqlです。
テーブルは以下のように1対多となっています。
・一側テーブル(名:users)

idname
1A
2B
3C

・多側テーブル(名:rental_histories)

iduser_id(FK)book_number
11101
21102
32101
42103
53101

この状態でuserを検索する場合に「rental_historiesテーブルに'103'を持つuser(B)を除いた結果を返す=userAとuserCを返す」
としたいです。

しかし下記のコードを試しても、rental_histroyの'101'があるからなのかA,B,C出てきてしまいます。

$users = User::whereHas('rental_histories',function($q){ $q->where('book_number', '<>', '103'); });
$users = User::join('rental_histories', 'users.id', '=', 'rental_histories.user_id)->where('rental_history.book_number', '<>', '103') ->get()

以上、方法についてご存知でしたらご教授頂けないでしょうか。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こういうことですか?

  • 元データ

SQL

1create table rental_histories(id int primary key,user_id int, book_number int,index(user_id,book_number)); 2insert into rental_histories values 3(1,1,101), 4(2,1,102), 5(3,2,101), 6(4,2,103), 7(5,3,101);
  • user_id抽出

SQL

1select distinct user_id from rental_histories as t1 2where not exists 3(select 1 from rental_histories as t2 4where t1.user_id=t2.user_id and t2.book_number=103); 5

投稿2018/06/11 03:53

yambejp

総合スコア114968

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

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

wag52

2018/06/11 06:50

ご回答ありがとうございます! 期待通りの動きができました! 本当にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問