Ik heb een tabel met producteigenschappen (waar 1mln regels in staan). Iedere regel is één producteigenschap, waarbij EAN het unieke product specificeert. Het aantal eigenschappen per product (EAN) kan oplopen tot 100.
De databasetabel ziet er als volgt uit:
Naam: tabel1
Info_Id EAN Info_Type Info_Value 1 0123456789 brand brand1 2 0123456789 type type1 3 0123456789 price 0.00 4 9876543210 brand brand6 5 9876543210 type type3 6 9876543210 price 15.00 7 6548214656 brand brand34 8 6548214656 type type1 9 6548214656 price 99.00 10 245511411241 brand brand36 11 245511411241 type type1 12 245511411241 price 98.00 13 245511411241 size 23x32 14 245511411241 weight 324 gr 15 245511411241 amount 978322 etc etc etc etc
Op deze tabel wil ik met meerdere filters een selectie doen. Stel, ik wil hier alle producten selecteren met:
een prijs (Info_Type = "price") tussen de 25 en 35 euro
van merk (Info_Type = "brand") X
van type (Info_Type = "type") Y
dus:
Selectie voor de prijs: Info_Type = price ; Info_Value >= 25 ; Info_Value <= 35
Selectie voor het merk: Info_Type = brand ; Info_Value = X
Selectie voor type: Info_Type = type1 ; Info_Value = Y
Daarnaast moet in een tweede tabel gezocht worden naar de status en ook hier een filter op toegepast worden (alleen producten met status 1 mogen worden weergegeven):
Naam: tabel2
Product_Id Status EAN 1 1 0123456789 2 2 9876543210 3 1 6548214656 4 1 245511411241
Deze status-waarden dienen dus bij de eerste tabel gezocht te worden met een join.
Voor producten die aan al deze drie voorwaarden voldoet wil ik dat ie de EAN's ophaalt en vervolgens alle regels in de gehele tabel weergeeft waar deze EAN bij staat (dus ook de regels waarop geen filters toegepast zijn, maar die wel toebehoren aan producten die binnen de selectie vallen). Daarnaast wil ik een limiet van 25 producten weergeven (dus: 25 unieke EAN's, maar voor die EAN's wel alle regels).
Hoe doe ik dit efficiënt met één query?
Ben benieuwd of jullie me hiermee kunnen helpen!
- MySql query - geavanceerde selectie op producteigenschappen
-
02-05-2017, 15:51 #1Particulier
- Berichten
- 139
- Lid sinds
- 12 Jaar
MySql query - geavanceerde selectie op producteigenschappen
Laatst aangepast door A. Hendriks : 02-05-2017 om 16:07
-
In de schijnwerper
-
02-05-2017, 16:17 #2
- Berichten
- 1.915
- Lid sinds
- 18 Jaar
Re: MySql query - geavanceerde selectie op producteigenschappen
PHP Code:SELECT * FROM tabel2 WHERE EAN IN (SELECT EAN FROM tabel1 WHERE Info_Type = blabla) AND Status = 1
-
02-05-2017, 16:19 #3
- Berichten
- 1.915
- Lid sinds
- 18 Jaar
Re: MySql query - geavanceerde selectie op producteigenschappen
PHP Code:SELECT * FROM tabel2 INNER JOIN tabel 1 ON tabel2.EAN = tabel1.EAN WHERE EAN IN (SELECT EAN FROM tabel1 WHERE Info_Type = blabla) AND Status = 1 LIMIT 0,25
-
02-05-2017, 16:37 #4Particulier
- Berichten
- 139
- Lid sinds
- 12 Jaar
Re: MySql query - geavanceerde selectie op producteigenschappen
Dank voor je reactie. Dit geeft nog een aantal problemen:
- ik krijg 25 regels met eigenschappen terug, niet alle regels met eigenschappen voor 25 producten
- Ik krijg dit alleen uitgevoerd met een zeer trage SQL_BIG_SELECTS
Is er een andere mogelijkheid waarmee dit wel het gewenste resultaat geeft?
-
02-05-2017, 22:33 #5
- Berichten
- 1.915
- Lid sinds
- 18 Jaar
Re: MySql query - geavanceerde selectie op producteigenschappen
Heb je misschien voorbeeld data voor mij? Dan kan ik ergens tegenaan query'en. Ik ben meer thuis in MS sql queries dan in MySql queries over het algemeen, ik heb daar wel wat performance verschillen in gezien, maar dat zal ik echt moeten uitproberen.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic