login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Zoekmachines > Database zoeken

Database zoeken

Auteur: Maarten - 19 juni 2006 - 23:16 - Gekeurd door: Maarten - Hits: 14098 - Aantal punten: 4.80 (5 stemmen)




Database zoeken? Geen probleem zul je zeggen, ik doe dat gewoon met MATCH() en AGAINST(). Dat is inderdaad een goeie instelling, maar deze functies willen je database beschermen en zullen daarom geen resultaten weergeven indien je trefwoord kleiner of gelijk is aan 3 letters (bijvoorbeeld 'php', 'asp', 'ap' of 'dj').

Dankzij een levendige uitleg van nemesiskoen heb ik een functie geschreven die zorgt dat mensen die deze zoekopdrachten willen toepassen niet uit de boot vallen.

De bedoeling van de functie is om alle ID's van items in een tabel $table op te halen die voldoen aan de zoekopdracht. Achteraf kan je dan met een aantal queries extra gegevens ophalen.

Het gebruik is zeer simpel:
  1. <?php
  2. $results = searchDatabase('php asp',array('title','description'),'links','lang = \'NL\'');
  3. ?>
$results is nu een array met alle ID's waar 'php' of 'asp' is gevonden in de titel of beschrijving, en dit voor de tabel 'links'. Als extra WHERE parameter is meegegeven dat het veld 'lang' gelijk moet zijn aan 'NL'.

Opmerking: voor de mensen die denken dat firstItem() nutteloos is en dat je hiervoor array_shift() kan gebruiken: mysql_fetch_row geeft niet ALTIJD een array terug, maar ook false indien er geen resultaten zijn. firstItem() vangt dit dus op door eerst te controleren of het om een array gaat.

Code:
  1. <?php
  2. function firstItem($array, &$result) {
  3. if(!is_array($array)) return false;
  4. foreach($array as $v) $result[] = $v;
  5. }
  6.  
  7. function searchDatabase($keywords,$fields,$table,$where = '') {
  8. $result = array();
  9. if(strlen($keywords) > 3) {
  10. $q = mysql_query("SELECT id FROM ".$table." WHERE MATCH(".implode(',',$fields).") AGAINST('".$keywords."') ".$where) or die(mysql_error());
  11. while(firstItem(mysql_fetch_row($q), $result));
  12.  
  13. $split = explode(' ',$keywords);
  14. if(count($split) > 1) {
  15. foreach($split as $v) $result = array_merge($result,searchDatabase($v,$fields,$table,$where));
  16. }
  17.  
  18. } else {
  19. $q = mysql_query("SELECT id FROM ".$table." WHERE ".implode(" LIKE '%".$keywords."%' OR ",$fields)." LIKE '%".$keywords."%' ".$where) or die(mysql_error());
  20. while(firstItem(mysql_fetch_row($q), $result));
  21. }
  22. return array_unique($result);
  23. }
  24. ?>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (8)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.033s