Uitkomst query op basis van 2 condities
Namelijk:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
Select
producten.idproduct AS id, producten.productlink, producten.prijs, prod_omschrijving.producttitel, prod_categorie.idcategorieen, merk.merknaam
FROM producten
INNER JOIN prod_omschrijving ON producten.idproduct=prod_omschrijving.idproduct
INNER JOIN prod_categorie ON producten.idproduct=prod_categorie.idproduct
INNER JOIN merk ON producten.idmerk=merk.idmerk
INNER JOIN prod_sorteer ON prod_sorteer.idproduct=producten.idproduct
WHERE prod_omschrijving.taal='NL'
AND producten.verhuurlijst='1'
AND aantal >=0
AND prod_categorie.idcategorieen='5024'
AND prod_sorteer.groupid='3'
AND prod_sorteer.groupid='4'
GROUP BY prod_sorteer.idproduct
ORDER BY prod_omschrijving.producttitel
LIMIT 9 OFFSET 0
?>
Select
producten.idproduct AS id, producten.productlink, producten.prijs, prod_omschrijving.producttitel, prod_categorie.idcategorieen, merk.merknaam
FROM producten
INNER JOIN prod_omschrijving ON producten.idproduct=prod_omschrijving.idproduct
INNER JOIN prod_categorie ON producten.idproduct=prod_categorie.idproduct
INNER JOIN merk ON producten.idmerk=merk.idmerk
INNER JOIN prod_sorteer ON prod_sorteer.idproduct=producten.idproduct
WHERE prod_omschrijving.taal='NL'
AND producten.verhuurlijst='1'
AND aantal >=0
AND prod_categorie.idcategorieen='5024'
AND prod_sorteer.groupid='3'
AND prod_sorteer.groupid='4'
GROUP BY prod_sorteer.idproduct
ORDER BY prod_omschrijving.producttitel
LIMIT 9 OFFSET 0
?>
Het gaat dan om dit gedeelte:
AND prod_sorteer.groupid='3'
AND prod_sorteer.groupid='4'
op deze pagina:
http://www.jcsl.nl/index-clean.php?lan=NL&pagina=verhuur&cat=rigging&subcat=truss&trusseigenschap=baseplate&trusssoort=vierkant_truss&pagnr=1
Op de pagina wordt de query ook weergegeven.
Wat ik dus wil is nu alle producten weergeven die in het tabel prod_sorteer bij de waarde groupid zowel 3 als 4 hebben.
het tabel ziet er als volgt uit:
INSERT INTO `prod_sorteer` (`id`, `idproduct`, `groupid`) VALUES
(21, 310, 3),
(34, 310, 4)
(ik heb de inhoud van het tabel even beperkt tot product 310 die als groupid 3 en 4 heeft).
Maar als ik dit zo doe krijg ik 0 resultaten. Nu had ik ergens gegelzen dat ik OR moest gebruiken, maar in dat geval krijg ik de resultaten die zowel groupid 3 of groupid4 hebben en ik wil juist dat ze aan beide condities voldoen.
Als er maar 1 conditie geselecteerd wordt werkt het script uiteraard wel.
Benader ik dit helemaal verkeerd en moet ik de opbouw van de tabellen geheel anders aanpakken of zit de oplossing in de query.
Ik hoop dat mijn vraag icm de link wat duidelijk is.
Gewijzigd op 30/03/2017 07:38:05 door J C
Vervang de INNER JOINs eens door LEFT JOINs?
Veranderd, maar nog geen verschil in de resultaten.
AND prod_sorteer.groupid='4'
dat betekent, zoals je het nu opschrijft, dat je een record zoekt waarvoor geldt dat groupid zowel de waarde 3 als 4 heeft. Dat kan niet: groupid is 4 of 3 of 5 of 99, maar heeft nooit gelijktijdig 2 waarden.
Vraag: komt elk groupid maar 1 keer voor voor elk product?
Dan kun je namelijk tellen: je zoekt naar producten die groupid 3 of 4 hebben, en als je dan vervolgens telt hoeveel je er vond per product, moeten het er precies 2 zijn.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SELECT
producten.idproduct AS id,
producten.productlink,
producten.prijs,
prod_omschrijving.producttitel,
prod_categorie.idcategorieen, merk.merknaam
FROM producten
INNER JOIN merk ON producten.idmerk=merk.idmerk
WHERE producten.groupid IN (3,4)
GROUP BY id, productlink, prijs, producttitel, merknaam
HAVING COUNT(1) = 2
producten.idproduct AS id,
producten.productlink,
producten.prijs,
prod_omschrijving.producttitel,
prod_categorie.idcategorieen, merk.merknaam
FROM producten
INNER JOIN merk ON producten.idmerk=merk.idmerk
WHERE producten.groupid IN (3,4)
GROUP BY id, productlink, prijs, producttitel, merknaam
HAVING COUNT(1) = 2
zou je producten zoeken die in 3, 4, 6 en 99 zitten, dan moet count gelijk zijn aan 4
Toevoeging op 30/03/2017 10:15:09:
ah ik zie dat groupid bij jouw setup in een andere tabel zit.
De join kan er ook nog wel bij.
maar het gaat in mijn voorbeeldje even om het idee: tellen en zorgen dat je als aantal 2 vindt met HAVING
In het voorbeeld van de website is het zo dat er bij deze producten 2 groupid kunnen worden gevraagd, maar soms wil de bezoeker alleen alle producten zijn met groupid4
En dan zijn er ook pagina's waarbij er er maar 1 groupid gevraagd kan worden.
Even concreet:
Een bezoeker kan op de website alleen vragen om vierkante truss en verder de zoekoptie "truss eigenschap" niet gebruiken.
Het idee is afgekeken van deze webshop:
https://www.rolight.nl/Home/Webshop/truss/truss
Het idee van Ivo is zo gek nog niet, al moet je dat nog wel even aanpassen op je datamodel.
Hoeveel groupids je kan opvragen is niet relevant, want je bent zo te zien op zoek naar "hoeveelheid geselecteerde opties" ten opzichte van de matches. Je kunt heel eenvoudig in je menu bijhouden hoeveel opties je gekozen hebt en daar op inspelen, etc. Ik heb alleen de vraag wat je zou doen wanneer je meerdere opties zou kunnen selecteren (in een OR constructie, in de vorm van "het moet zwart zijn of wit" oid). Dan ontkom je niet aan het dynamisch opbouwen van je query.
Gewijzigd op 30/03/2017 23:36:38 door Ben van Velzen
Misschien moet ik het toch maar bij 1 sorteer optie houden of iemand inhuren die hier meer van verstand van heeft.
Gewijzigd op 30/03/2017 23:46:18 door J C
Voor zoiets (zeker als je minder kennis hebt) kan het raadzaam zijn om naar een bestaande oplossing te kijken, zoals Magento. Is gratis, dus dat is geen belemmering. Het enige dat in de weg kan zitten is dat je wat specifieke serverconfiguratie nodig hebt om het echt snel te krijgen, maar er zijn genoeg mensen die dat kunnen.
Het wordt ook geen webshop, meer een lijst met eigen spullen, zodat mensen kunnen zien wat we in huis hebben.
Het klinkt allemaal erg eenvoudig, al zijn er wat randgevallen.
Het is erg vooringenomen, maar ik houd mezelf aanbevolen als je een oplossing op maat wilt.
Gewijzigd op 31/03/2017 01:41:32 door Ben van Velzen
Ik heb wel eens gekeken naar een webshop, maar moest de software zover laten aanpassen, dat dit te kostbaar werd en bovendien erg kostbaar werd om nog te updaten als er weer een update komt.
Vandaar dat ik de software nu zelf wil bouwen, waarbij ik de moeilijk dingen zoals inlogsysteem en de dingen waar ik niet uit kom uit besteed aan freelance scripters.
Maar ik neem je aanbod graag aan, zou je mij een mailtje kunnen sturen? Mijn emailadres staat op de website, mocht je interesse hebben.
Dit is alleen niet direct een verschil, maar een laag die over de standaardfunctionaliteit heen wordt geplaatst.
Ik wil hierin ook niet lullig doen, maar ik heb ook op deze website een profiel waarlangs ik bereikbaar ben; wanneer je iets wil ben ik beschikbaar, ik ben alleen niet bereid om vanuit mijn kant contact te zoeken, jouw vragen zijn allen van jouw kant. Dit geeft je ook een positie om te onderhandelen.