を除外するために参加し、私はlaravelアプリケーションで以下のテーブルがあります:basket_items
テーブルでSQL - インナー行
basket
------
id PK
user_id FK
coupon_id FK
basket_items
------------
id PK
basket_id FK
product_id FK
quantity
purchaseable_id
purchaseable_type -- e.g. App\Job, App\CV
products
--------
id PK
name -- e.g. standard job listing, premium job listing, cv download
price
jobs
----
id PK
product_id FK
title
start_dt
expiry_dt
description
cvs
------
id PK
name
purchaseable_id
とpurchaseable_type
が多型の関係ですが。例えば。ユーザは、プレミアム製品リストである自分のバスケットにジョブを追加することができる。この場合のpurchaseable_idは、ジョブテーブルからのジョブのIDであり、purchaseable_typeはApp\Job
である。 basket_itemsテーブル内のサンプル行は、次のようになります。
id | basket_id | product_id | quantity | purchaseable_id | purchaseable_type
----------------------------------------------------------------------------
1 | 1 | 1 | 1 | 1 | App\Job
2 | 1 | 3 | 1 | 1 | App\CV
私は、ユーザーのすべてのbasket_itemsをリストが、purchaseable_typeがApp\Job
で、ジョブの有効期限が切れている場合の項目を除外したいです。
私は次のことを試してみましたが、それはすべてのpurchaseable_typeの項目を除いた、すなわち、あなたが参加し、左を使用すると、ジョブが、一致していないテーブル内のすべてのフィールドを
select t1.*, t2.*
from baskets t1
inner join basket_items t2 on t2.basket_id = t1.id
left join jobs t3 on t3.id = t2.purchaseable_id and t2.purchaseable_type = 'App\\Job'
where t1.user_id = 1 and t3.expiry_dt > now()
質問を編集し、サンプルデータと希望する結果を提供してください。 –