Ik heb een webshop met een 100-tal databasetabellen waar producten in staan. Deze tabellen vertegenwoordigen ieder een productgroep. Nu moet de algemene zoekfunctie van de site natuurlijk alle producten doorzoeken. Momenteel gebruik ik een foreach loop die alle tabellen één voor één doorzoekt met een query. Hij zoekt per tabel dan in de velden: titel, omschrijving en tags.
Dit zijn dus 100 queries die bij iedere zoekactie uitgevoerd worden en is dus erg traag. Hoe is dit beter aan te pakken?
SELECT * FROM `dameskleding` WHERE
(merk LIKE CONVERT(_utf8 "%'.$search_str.'%" USING latin1)COLLATE latin1_german1_ci
|| titel LIKE CONVERT(_utf8 "%'.$search_str.'%" USING latin1)COLLATE latin1_german1_ci
|| beschrijving LIKE CONVERT(_utf8 "%'.$search_str.'%" USING latin1)COLLATE latin1_german1_ci
|| tags LIKE CONVERT(_utf8 "%'.$search_str.'%" USING latin1)COLLATE latin1_german1_ci
|| merk LIKE CONVERT(_utf8 "%'.str_replace(" ","",$search_str).'%" USING latin1)COLLATE latin1_german1_ci
|| titel LIKE CONVERT(_utf8 "%'.str_replace(" ","",$search_str).'%" USING latin1)COLLATE latin1_german1_ci
|| beschrijving LIKE CONVERT(_utf8 "%'.str_replace(" ","",$search_str).'%" USING latin1)COLLATE latin1_german1_ci
|| tags LIKE CONVERT(_utf8 "%'.str_replace(" ","",$search_str).'%" USING latin1)COLLATE latin1_german1_ci) ORDER BY id DESC
Het werkt, maar is dus zeer traag omdat bovenstaande query 100 keer uitgevoerd wordt, voor iedere tabel één keer. Per tabel moeten iedere keer dezelfde velden doorzocht worden. Hoe kan dit beter? Dank alvast!
- Zoekfunctie op grote webshop
-
12-03-2014, 11:59 #1Particulier
- Berichten
- 139
- Lid sinds
- 12 Jaar
Zoekfunctie op grote webshop
-
In de schijnwerper
-
12-03-2014, 12:19 #2Eigenaar Sitedeals
- Berichten
- 2.808
- Lid sinds
- 18 Jaar
Re: Zoekfunctie op grote webshop
Simplistisch gezegd kun je beter een tabel aanmaken specifiek voor het zoeken, waarbij je dus alle relevantie zoekwoorden in opslaat per product met een referentie naar het daadwerkelijk product. De zoek query moet dan die tabel raadplegen en de referenties ophalen.
Let wel als je enorm veel producten hebt 200k+ (afhankelijk van je server resources) word het alsnog traag.
-
12-03-2014, 12:26 #3Particulier
- Berichten
- 4
- Lid sinds
- 13 Jaar
Re: Zoekfunctie op grote webshop
Ik denk dat je beter een view kunt aanmaken met een index en dan op die view je selectie maken
-
12-03-2014, 12:34 #4Particulier
- Berichten
- 139
- Lid sinds
- 12 Jaar
Re: Zoekfunctie op grote webshop
Wat bedoel je precies met een 'view'? Is dat wat Schneider zegt, een nieuwe tabel met alle info erin?
Daarnaast zit ik met een ander dingetje: stel dat er twee spaties zitten in het zoekwoord en iemand zonder spaties zoekt, is dat op te lossen?
Dus in de DB staat ie opgeslagen als:
buiten plant
en iemand zoekt op:
buitenplant
Hoe is dat te verwerken in de query?
-
12-03-2014, 13:47 #5Particulier
- Berichten
- 1.412
- Lid sinds
- 15 Jaar
Re: Zoekfunctie op grote webshop
Waarom maak je geen dropdown met "categorie" bij je zoekfunctie.
Dus zoekwoord + categorie.
Als iemand dan zoekt op "nike" bij de categorie "schoenen" dan hoeft je database niet de "planten" afdeling door te zoeken.
Omgekeerd hoeft je database bij "bromelia" met de categorie "planten" niet de "schoenen" te doorzoeken.
Je bezoeker krijgt relevantere zoekresultaten en je database wordt minder belast.
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