[PHP] zoekfunctie

Pagina: 1
Acties:
  • 167 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hallo,

Ik ben verder aan het werken aan een zoekfunctie waar ik ooit aan begonnen ben maar het werkt wel allemaal perfect alleen als ik bij trefwoorden 2 woorden typ dan behandeld hij deze als 1 string dus hij zal in de database enkel de records uithalen waar deze 2 woorden naast elkaar voorkomen... Nu wil ik dat hij deze woord appart behandeld dus dat die twee woorden niet naast elkaar hoeven te staan maar hoe doe ik dit?

Hier op tweakers heb ik gezien dat ze met een array werken maar met dat idé kom ik eigenlijk niet ver want de trefwoorden zet hij nog als 1 string in de query...

Is er iemand die me ff verder kan helpen?

Acties:
  • 0 Henk 'm!

  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
Database? Taal? Voorbeeldcode?

Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 14:39

Johnny

ondergewaardeerde internetguru

Hoe zit je zoekfunctie in elkaar? Ik zie iets over een database staan? Laat eens zien hoe de structuur van de tabel in elkaar zit en welke query je gebruikt om te zoeken.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • RAJH
  • Registratie: Augustus 2001
  • Niet online
De string exploden op spaties en zo verder werken?

Acties:
  • 0 Henk 'm!

  • Upsal
  • Registratie: Mei 2005
  • Laatst online: 27-08-2024
Kijk eens naar Full-Text search indien je gebruik maakt van MySQL. Daarmee kun je vrij geavanceerde zoekwoorden ingeven.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja ik maak inderdaad gebruik van mysql. De trefwoorden worden met nog een aantal andere sorteer opties verstuurd via get. hierna wordt de query opgesteld :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$query="SELECT t.topic_id, t.topic_naam, t.topic_laatsteposttijd, t.topic_status, t.topic_posts, l.led_nickname, f.forum_afkorting, f.forum_naam, c.cat_groepen
                FROM v1_topic as t, v1_posts as p, v1_leden as l, v1_forum as f, v1_categorie as c
                WHERE (p.posts_bericht LIKE '%".$_GET["trefwoorden"]."%' OR t.topic_naam LIKE '%".$_GET["trefwoorden"]."%') AND p.posts_topicid=t.topic_id AND t.topic_startid=l.led_id AND t.topic_forumid=f.forum_id AND f.forum_catid=c.cat_id ";
                
        if(!empty($_GET["topicstarter"])){
            $query .="AND l.led_nickname='".$_GET["topicstarter"]."' ";
        }
        
        if($_GET["statustopic"]=="open"){
            $query .="AND t.topic_status='normaal' ";
        }elseif($_GET["statustopic"]=="gesloten"){
            $query .="AND t.topic_status='gesloten' ";
        }elseif($_GET["statustopic"]=="sticky"){
            $query .="AND t.topic_status='sticky' ";
        }elseif($_GET["statustopic"]=="faq"){
            $query .="AND t.topic_status='faq' ";
        }
        
        if(!isset($_GET["forum"])){
            $forums="Alles";
        }else{
            $forums=join(',', $_GET['forum']);
        }
        
        if($forums!="Alles"){
            $query .="AND f.forum_id IN($forums)";
        }
        
        if($_GET["sorteerop"]=="datum_topicstart"){ 
            $query .="ORDER BY t.topic_starttijd ";
        }else{                  
            $query .="ORDER BY t.topic_laatsteposttijd ";
        }
        
        if($_GET["richting"]=="oplopend"){
            $query .="ASC ";
        }else{
            $query .="DESC ";
        }


zou het een goede methode zijn om gelijk hiervoor al gezegt de sting te exploden en dan het aantal elementen in de array te tellen, een for lus mee op te stellen en dan doormiddel van de for-lus de query te laten genereren met LIKE?

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Zoals Upsal zegt, kijk naar Full Text Search. Is iets efficienter als LIKE statements.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 22:14
kijk ook eens naar sql injection?

Acties:
  • 0 Henk 'm!

Verwijderd

Wat hij zegt, dit is echt zwaar vragen om problemen zo!

edit:

Heb je je gerealiseerd dat je zo enorm onrelevante zoekresultaten terug gaat geven? De volgorde van de zoekresultaten word nu gewoon bepaald door de volgorde waarin het in de DB staat.

Als ik jou was zou ik een aparte tabel maken met een index van alle trefwoorden, welke een waarde hebben hoe relevant ze voor het document zijn. Kijk hiervoor bijvoorbeeld eens naar TFIDF en het Vector Space Model. Je zou dan 1 keer in de zoveel tijd je index bij moeten werken, maar dan krijg je tenminste goed relevante zoekresultaten terug.
RAJH schreef op donderdag 05 april 2007 @ 20:49:
De string exploden op spaties en zo verder werken?
Misschien beter een regex op leestekens en alle whitespace?

[ Voor 70% gewijzigd door Verwijderd op 06-04-2007 19:51 ]

Pagina: 1