Archief - SQL: Totaal vinden met NOT IN

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

iamdesign

Legacy Member
Hoy,

Ik heb volgende tabellen

product_items
----------------------
id
pid

reservaties
----------------------
id
gid (=gebruikerid)
pid
begindatum
einddatum

Nu zou ik een SQL moeten hebben die het aantal productitems ophaalt, die buiten de reservatiedatums vallen.

(ik ben bezig met een reservatiesysteem, die een overzicht moet geven van hoeveel productitems nog over zijn tussen bepaalde data)

Ik had vlg sql in gedachten

PHP:
SELECT COUNT(product_item.pid) 
FROM product_item INNER JOIN reservaties
 ON product_item.pid = reservaties.pid 
WHERE product_item.pid 
NOT IN (SELECT reservaties.pid FROM reservaties WHERE 
reservaties.begindatum BETWEEN '2007-02-23' AND '2007-02-26' 
OR reservaties.einddatum BETWEEN '2007-02-23' AND '2007-02-26')

Dit levert telkens niets op (er zit een reservatie in de DB tussen die data).

Kan er iemand mij helpen?

alvast bedankt :)

Bottom

Legacy Member
In tabel reservaties hou je de productid ook nog eens bij? Waarom join je dan met product_item?

iamdesign

Legacy Member
mysql :)

maar ik heb het ondertusse al gevonden.
Allé ja een gemakkelijkere work around gevonden, gewoon het aantal pid's in reservaties telle + aantal pids in product_items telle en deze aftrekke van elkaar :)

om 4u smorges begin je wel wat workarounds te zoeken ;)

H@voc_!nc.

Legacy Member
SELECT COUNT(product_item.pid)
FROM product_item INNER JOIN reservaties
ON product_item.pid = reservaties.pid
WHERE product_item.pid
NOT IN (SELECT reservaties.pid FROM reservaties WHERE
reservaties.begindatum BETWEEN '2007-02-23' AND '2007-02-26'
OR reservaties.einddatum BETWEEN '2007-02-23' AND '2007-02-26')

Lijkt me nie logisch. Dien join heeft geen enkel nut in combinatie met dien existing
Ofwel zo
SELECT COUNT(product_item.pid)
FROM product_item WHERE product_item.pid
NOT IN (SELECT reservaties.pid FROM reservaties WHERE
reservaties.begindatum BETWEEN '2007-02-23' AND '2007-02-26'
OR reservaties.einddatum BETWEEN '2007-02-23' AND '2007-02-26')

Lijkt me beter :)

SELECT COUNT(product_item.pid)
FROM product_item INNER JOIN reservaties
ON product_item.pid = reservaties.pid
Having reservaties.begindatum BETWEEN '2007-02-23' AND '2007-02-26'
OR reservaties.einddatum BETWEEN '2007-02-23' AND '2007-02-26')

oftewel zo me dunkt (ben nie 100% zeker). Dit is een meer performante oplossing. IN is nie echt performant
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan