Ich habe die folgenden Tabellen in einer Laravel Anwendung:SQL - Inner Join Reihen auszuschließen
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
Die purchaseable_id
und purchaseable_type
in der basket_items
Tabelle sind polymorph Beziehungen. Z.B. Ein Benutzer kann seinem Warenkorb einen Job hinzufügen, bei dem es sich um einen Premium-Produkteintrag handelt - die käufliche_ID wäre in diesem Fall die ID des Jobs aus der Jobtabelle und der käufliche_Typ wäre App\Job
. Beispielzeilen in der basket_items Tabelle kann wie folgt aussehen:
id | basket_id | product_id | quantity | purchaseable_id | purchaseable_type
----------------------------------------------------------------------------
1 | 1 | 1 | 1 | 1 | App\Job
2 | 1 | 3 | 1 | 1 | App\CV
ich alle basket_items für einen Benutzer auflisten möchten aber Gegenstände auszuschließen, wenn der purchaseable_type App\Job
ist und der Job ist abgelaufen.
Ich habe folgendes versucht, aber es schließt alle Zeilen, wenn der Auftrag abgelaufen ist, dh es Elemente von jedem purchaseable_type schließt
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()
Bearbeiten Sie Ihre Frage und liefern Sie Beispieldaten und gewünschte Ergebnisse. –