Hieronder staat een tabel met keyvalue pairs zowel key als value zijn tekst velden. Dit is een deel van de tabel, maar dit is het belangrijkste deel.
De bedoeling is dat in de userinterface een of meerdere keys selecteerd wordt en dan vult de gebruiker daar een vakue voor in. Het is een zoekfunctie. bv.
Ik zoek op alles met een lengte van 100. Resultaat moet dan id 1 en 3 zijn. Nu wil ik dit uitbreiden.
Ik zoek op een lengte van 100 en kleur groen. Resultaat id 3. 3 is namelijk kleur groen en lengte van 100.
Ik heb dit opgelost mbv een INTERSECT, maar als er gezocht dient te worden op meerdere keys dan krijg je voor elke key een INTERSECT.
Mijn vraag: Is dit een goede oplossing is qua perfomance? Of is er een makkelijkere manier. Ik weet zo niet hoe ik dit anders moet oplossen.
DB = postgreSQL
Aan de tabel structuur kan helaas niets veranderd worden.
De bedoeling is dat in de userinterface een of meerdere keys selecteerd wordt en dan vult de gebruiker daar een vakue voor in. Het is een zoekfunctie. bv.
Ik zoek op alles met een lengte van 100. Resultaat moet dan id 1 en 3 zijn. Nu wil ik dit uitbreiden.
Ik zoek op een lengte van 100 en kleur groen. Resultaat id 3. 3 is namelijk kleur groen en lengte van 100.
Id | Key | Value |
1 | lengte | 100 |
1 | kleur | oranje |
1 | hoogte | 358 |
3 | lengte | 100 |
3 | kleur | groen |
3 | temperatuur | 31 |
1 | datum | 22-02-08 |
8 | naam | DHS323 |
Ik heb dit opgelost mbv een INTERSECT, maar als er gezocht dient te worden op meerdere keys dan krijg je voor elke key een INTERSECT.
Mijn vraag: Is dit een goede oplossing is qua perfomance? Of is er een makkelijkere manier. Ik weet zo niet hoe ik dit anders moet oplossen.
SQL:
1
2
3
4
| SELECT id FROM mytable WHERE Key = 'lengte' AND Value = '100' INTERSECT SELECT id FROM mytable WHERE Key = 'kleur' AND Value = 'groen' --INTERSECT n voor elke key/value pair waarop nog meer gezocht moet worden. |
DB = postgreSQL
Aan de tabel structuur kan helaas niets veranderd worden.
To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles