Ik heb de volgende query die achter een zoekfunctie op mijn website in aanbouw zit:
Dit is een voorbeeld van een query die opgebouwd wordr naar aanleiding van het zoeken op de termen: 'test' 'tekst' en 'meertekst'. Er wordt gezocht in het veld tekst, dit bevindt zich in de tabel forumonderwerp_regels. Bij elke forumonderwerp kunnen logischerwijs meerdere forumonderwerp_regels horen.
Op zich werkt de query wel, maar deze doet niet helemaal wat ik wil. Ik wil namelijk alle onderwerpen terugzien waarin de zoektermen allemaal terugkomen in tenminste één van de berichten van dat onderwerp. Met bovenstaande query krijg ik echter alleen de onderwerpen terug die een bericht bevatten waarin alle zoektermen voorkomen. Alle zoektermen moeten dus in hetzelfde bericht zitten. Ik wil dus echter dat een onderwerp ook in het resultaat voorkomt als bij de ene zoekterm in het eerste bericht van het onderwerp zit, de tweede in het zesde bericht van het onderwerp en de derde zoekterm in het laatste bericht.
Ik zag dat dit wel gebeurt als ik op dit forum een zoekactie start waarbij ik aangeef dat alle termen voor moeten komen. Daarom hoop ik langs deze weg de oplossing te vinden. Iemand die me kan aangeven hoe ik dit voor elkaar kan krijgen? Het liefst ook nog zo efficient mogelijk qua snelheid want de database zal al snel een behoorlijke omvang krijgen.
Ik heb er over zitten denken om (bij het opslaan van nieuwe berichten) alle teksten in het veld "tekst" in forumonderwerp_regels ook nog eens achter elkaar geplakt op te nemen in forumonderwerpen (in een apart veld dus) zodat ik dan in dit samengeplakte veld in forumonderwerpen kan zoeken. Dit zal wellicht voor het zoeken snel het gewenste resultaat geven, maar dan sla ik alle tekst twee keer op in de database en dat lijkt me nou niet bepaald wenselijk. Is er een betere oplossing voor dit probleem?
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
| SELECT DISTINCT laatste_berichtdatum as datum, forumonderwerpen.forumonderwerp_nummer, forumonderwerpen.forumgroep_nummer, aantal, forumonderwerp_naam FROM forumonderwerpen INNER JOIN forumonderwerp_regels ON forumonderwerp_regels.forumgroep_nummer = forumonderwerpen.forumgroep_nummer AND forumonderwerp_regels.forumonderwerp_nummer = forumonderwerpen.forumonderwerp_nummer WHERE (((Tekst LIKE '%test%' OR Forumonderwerp_naam LIKE '%test%'))) AND (((Tekst LIKE '%tekst%' OR Forumonderwerp_naam LIKE '%tekst%'))) AND (((Tekst LIKE '%meertekst%' OR Forumonderwerp_naam LIKE '%meertekst%'))) |
Dit is een voorbeeld van een query die opgebouwd wordr naar aanleiding van het zoeken op de termen: 'test' 'tekst' en 'meertekst'. Er wordt gezocht in het veld tekst, dit bevindt zich in de tabel forumonderwerp_regels. Bij elke forumonderwerp kunnen logischerwijs meerdere forumonderwerp_regels horen.
Op zich werkt de query wel, maar deze doet niet helemaal wat ik wil. Ik wil namelijk alle onderwerpen terugzien waarin de zoektermen allemaal terugkomen in tenminste één van de berichten van dat onderwerp. Met bovenstaande query krijg ik echter alleen de onderwerpen terug die een bericht bevatten waarin alle zoektermen voorkomen. Alle zoektermen moeten dus in hetzelfde bericht zitten. Ik wil dus echter dat een onderwerp ook in het resultaat voorkomt als bij de ene zoekterm in het eerste bericht van het onderwerp zit, de tweede in het zesde bericht van het onderwerp en de derde zoekterm in het laatste bericht.
Ik zag dat dit wel gebeurt als ik op dit forum een zoekactie start waarbij ik aangeef dat alle termen voor moeten komen. Daarom hoop ik langs deze weg de oplossing te vinden. Iemand die me kan aangeven hoe ik dit voor elkaar kan krijgen? Het liefst ook nog zo efficient mogelijk qua snelheid want de database zal al snel een behoorlijke omvang krijgen.
Ik heb er over zitten denken om (bij het opslaan van nieuwe berichten) alle teksten in het veld "tekst" in forumonderwerp_regels ook nog eens achter elkaar geplakt op te nemen in forumonderwerpen (in een apart veld dus) zodat ik dan in dit samengeplakte veld in forumonderwerpen kan zoeken. Dit zal wellicht voor het zoeken snel het gewenste resultaat geven, maar dan sla ik alle tekst twee keer op in de database en dat lijkt me nou niet bepaald wenselijk. Is er een betere oplossing voor dit probleem?
[ Voor 4% gewijzigd door curry684 op 06-05-2005 12:12 . Reden: code in [code] ]