Hallo
Ik gebruik het commando : ... WHERE name LIKE '%A B%' wat alles toont waar de string 'A B' in te vinden is.
Nu zou ik het graag zo hebben dat wanneer ik 'B A' ingeef 'A B' ook gevonden wordt, andersom dus.
Dit voorbeeld is met 2 waarden maar zou eigenlijk quasi oneindig moeten worden. Is daar een makkelijk commando voor?
Momenteel doe ik : WHERE name LIKE '%A%' AND name LIKE '%B%' AND ... tot zoveel trefwoorden.
Dat wordt echter omslachtig wanneer er veel trefwoorden ingevuld worden. Kan dat eenvoudiger?
Alvast bedankt
Wesley
- PHP > MySQL : WHERE LIKE in verschillede volgordes
-
28-06-2017, 20:22 #1
- Berichten
- 940
- Lid sinds
- 15 Jaar
PHP > MySQL : WHERE LIKE in verschillede volgordes
-
In de schijnwerper
Transparant je linkbuilding uitbesteden? Equote.nl helpt je verder!LinkpartnersAangeboden: Webshops en verkoopaccounts huis & tuinaccessoires 1.000.000 omzetWebsite te koopWebshop te koop: Veluwe cadeaus, souvenirs, interieur artikelen en woonaccessoiresWebsite te koopBacklinks plaatsen op websites met echte content én bezoekers?Advertentieruimte -
28-06-2017, 21:29 #2
- Berichten
- 59
- Lid sinds
- 13 Jaar
Re: PHP > MySQL : WHERE LIKE in verschillede volgordes
Wat bedoel je precies met omslachtig? Als je applicatie over 1000 keywords moet loopen heb jij daar toch niet veel last van? Of wil je juist zelf de query's schrijven? Het minste wat je nodig hebt is een array van keywords, veel simpeler kan het eigenlijk niet.
Ik weet niet hoe de rest van je code/applicatie er uit ziet en of je PHP gebruikt, maar heb je hier wat aan? : https://stackoverflow.com/questions/...keyword-search
-
29-06-2017, 08:48 #3
- Berichten
- 940
- Lid sinds
- 15 Jaar
Re: PHP > MySQL : WHERE LIKE in verschillede volgordes
Ik vat dus samen dat ik op 2 manieren kan werken :
* mogelijkheid 1 : WHERE naam_kolom REGEXP 'A' AND naam_kolom REGEXP 'B'
* mogelijkheid 2 : WHERE naam_kolom LIKE "%dog%" AND naam_kolom LIKE "%cat%" ( inclusief % tekens )
De tweede mogelijkheid is de manier die ik vrijwel altijd gebruikt heb. De eerste mogelijkheid kende ik nog niet.
Is er een verschil tussen beide manieren? Qua snelheid bijvoorbeeld? Wat raden jullie me aan?
Werkende krijg ik het maar wil de beste optie gebruiken. Alvast bedankt!
-
29-06-2017, 09:02 #4
- Berichten
- 390
- Lid sinds
- 15 Jaar
Re: PHP > MySQL : WHERE LIKE in verschillede volgordes
Het fijne van regular expressions is juist dat je een patroon kunt vormen wat ineens aan al je voorwaarden voldoet. Je hebt ze zelf bij je Mogelijkheid 1 gescheiden staan, maar kijk nog eens naar het beste antwoord in het topic wat Peter plaatste.
-
29-06-2017, 09:06 #5
- Berichten
- 940
- Lid sinds
- 15 Jaar
Re: PHP > MySQL : WHERE LIKE in verschillede volgordes
Probleem is dat het een OR is terwijl ik een AND nodig zou hebben - gaat dat dan ook?
Ik probeerde als + and & ... helaas lukt het me niet een AND op deze korte manier te laten werken ...
-
29-06-2017, 11:50 #6
- Berichten
- 390
- Lid sinds
- 15 Jaar
Re: PHP > MySQL : WHERE LIKE in verschillede volgordes
Sorry ik had vooral gekeken naar de link die Peter plaatste. Als het om AND gaat dan wordt het wat lastiger ja. Om even op SO te blijven maakt deze vraag plus de antwoorden dat wel duidelijk. Je zit inderdaad op de goede weg dan hoor. Al ben ik het met je eens dat het er allemaal niet ideaal uit ziet. En ik zou zelf wel bang zijn voor mindere prestaties als er tig keywords op die manier aan elkaar worden geregen, maar dat kun je waarschijnlijk wel testen met een flinke hoeveelheid bogus data. Of misschien kunnen meer bekwame SQL-ers daar alvast wat over zeggen,
-
29-06-2017, 11:52 #7Particulier
- Berichten
- 1.412
- Lid sinds
- 15 Jaar
Re: PHP > MySQL : WHERE LIKE in verschillede volgordes
Hoe groot is je database waarin je wil zoeken?
-
29-06-2017, 11:56 #8
- Berichten
- 940
- Lid sinds
- 15 Jaar
Re: PHP > MySQL : WHERE LIKE in verschillede volgordes
@ Tjerk :
Bedankt voor de referentie. Ik vraag me nu enkel af of ik best voor LIKE kies of voor REGEXP ?
Ik zie in uw referentie ook nog INSTR staan, maar dat komt op hetzelfde neer denk ik.
@ Wilbert :
Momenteel gaat het over < 1000 records maar dat kunnen er later misschien 10.000+ worden. Ik wil het ineens goed opbouwen zodat ik later niet opnieuw ga moeten herprogrammeren. Met mijn normale werkwijze LIKE '%woord1%' AND LIKE '%woord2%' lukt het natuurlijk wel maar wou weten of dat wel de meest ideale manier is.
-
29-06-2017, 12:11 #9Particulier
- Berichten
- 1.412
- Lid sinds
- 15 Jaar
Re: PHP > MySQL : WHERE LIKE in verschillede volgordes
Nee dat is niet de meest ideale manier, like is niet heel efficient en kan niet gebruik maken van indexes als je de wildcard aan de voorkant hebt ('%a'). Bij Like gaat Mysql alle rows langs in je database om te kijken of ze voldoen aan je opdracht.
Misschien kun je je eens verdiepen in full text search, daarbij kun je een index aanmaken. Als je die goed hebt staan zal het met een grote database veel sneller zijn.
Code:SELECT * FROM products WHERE MATCH (description) AGAINST ('+kaas +ei +boter' IN BOOLEAN MODE)
Let wel op dat je een juiste index op de kolom zet voor de efficientie.
+ = AND
- = NOT
Niets = OR
Lees meer op: http://www.vionblog.com/mysql-full-t...ultiple-words/
-
29-06-2017, 12:37 #1064BitsWebhosting.EU
- Berichten
- 2.092
- Lid sinds
- 17 Jaar
Re: PHP > MySQL : WHERE LIKE in verschillede volgordes
Dat ligt er maar aan wat je het meest ideaal vindt natuurlijk. Het feit dat mysql je functies levert zoals like, rlike, regexp, full_text indexen en nog een hoop meer geeft eigenlijk al aan dat er geen manier is die altijd ideaal is.
Mensen verwachten iets van een zoekopdracht en meestal is dat 'relevantie' en snelheid. Snelheid ga je al snel inleveren als mysql voor elke zoekopdracht een functie op elk record moet loslaten.
En daarnaast heeft zoeken ook nog een aantal limieten waar je mee om moet gaan. Zo zal zoeken op alleen de letter 'e' in een database van 10k records met een beetje pech je misschien wel 10k resultaten geven. Dan heb je dure onzinnige zoekqueries die je server gemakkelijk op zijn gat krijgen.
Je zoektijd mag bij grotere tabellen iig nooit logaritmisch stijgen.
Ook zul je rekening moeten houden met termen die geen zinvol resultaat leveren omdat ze teveel in de teksten aanwezig zijn (id, de het, hij, zij, etc), woorden die te kort zijn. En je kunt zelf natuurlijk nog wel meer verzinnen.
En om het nog leuker te maken. Je keuze ligt ook aan je hosting, of beter gezegd de resources die je ter beschikking hebt. Gebruik je grote indexen (op je tekstvelden bv) en een mysql functie die alle records moet nazoeken, dan moeten die indexen wel in het ram van de server gehouden worden om lekker snel te blijven. Indien dat niet mogelijk is omdat je met 100 andere users op een server zit die ook dit idee hadden, dan kun je bij een piek alsnog de boel plat hebben.
Een algemeen goede oplossing (indien je primair op hele keywords zoekt) is om bij het toevoegen van een record dat de tekst bevat, deze tekst in woorden op te splitsen en in een tabel op te slaan met een teller hoe vaak dat woord is gebruikt. In een andere tabel leg je dan de koppeling tussen de zoekwoorden en de records met de daadwerkelijke content. Je belast de server dan niet meer met ingewikkelde zoek acties maar je retrieved gewoon direct al je content-records die aan de keywords gekoppeld zijn. Je kunt dan de onzinnige keywords gewoon deactiveren in je database en leuke dingen zoals sorteren op het aantal keywords die voorkomen, een eigen systeem maken om de relevantie te bepalen e.d.
Maar je kunt natuurlijk ook iets gebruiken zoals SOLR en het zoeken overlaten aan een systeem dat er speciaal voor gebouwd is.
TL;DR; pak wat je nu gemakkelijk lijkt en get it over with zodat je je kunt concentreren op andere dingen. Naarmate je db en bezoekers groeien en je eisen veranderen, zul je het toch moeten aanpassen naar jouw specifieke situatie :)
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