Database zoekfuncite met Boolean Mode

Door Nee nee, 18 jaar geleden, 5.990x bekeken

Intro
Er staat al een zoekscript op phphulp en andere sites, maar deze zoeken niet goed. Als je bijvoorbeeld Bart Nienhuis intoetst, en voor en achternaam staan in een aparte kolom, komt er geen resultaat. Dat is hier helemaal anders!

Het maakt ook nog gebruik van Boolean. Hiermee kun je je zoekopdracht optimaliseren met bijvoorbeeld woorden die niet mogen voorkomen of juist wel. Dit moet u echter zelf in het formulier zetten, en zit niet ingebouwd. In een volgende versie zal ik het er in verwerken.

Database Structuur
Zo ziet de database eruit in het voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--
-- Tabel structuur voor tabel `bestanden`
--

CREATE TABLE IF NOT EXISTS `bestanden` (
  `username` varchar(60) collate latin1_general_ci NOT NULL,
  `naam` varchar(60) collate latin1_general_ci NOT NULL,
  `beschrijving` varchar(6000) collate latin1_general_ci NOT NULL,
  `tags` varchar(6000) collate latin1_general_ci NOT NULL,
  `vak` varchar(60) collate latin1_general_ci NOT NULL,
  `type` varchar(60) collate latin1_general_ci NOT NULL,
  FULLTEXT KEY `index1` (`naam`,`username`,`beschrijving`,`tags`,`vak`,`type`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

--
-- Gegevens worden uitgevoerd voor tabel `bestanden`
--

INSERT INTO `bestanden` (`username`, `naam`, `beschrijving`, `tags`, `vak`, `type`) VALUES
('admin', 'Antwoorden H2', 'De wiskunde antwoorden van de methode Getal en ruimte.', 'antwoorden wiskunde methode getal en ruimte hoofdstuk 2', 'wiskunde', 'antwoorden'),
('bartje545', 'Verslag Over Broeikas effect', 'Een verslag over het broeikas effect van de aarde. Ik heb het gemaakt voor aardrijkskunde', 'verslag broeikaseffect aardrijksunde', 'aardrijkskunde', 'verslag');



Configureren
Om dit script te laten werken moet je een fulltext index aan het CHAR, VARCHAR of TEXT veld maar ingezocht moet worden toevoegen. Dit kan in PhpMyAdmin door op het knopje: http://phphulp.jorendewit.nl/images/fulltext.png achter het betreffende veld te klikken of de volgende query uitvoeren:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ALTER TABEL artikelen ADD FULLTEXT (titel, inhoud)

Hierin moet titel, inhoud veranderd worden door de betreffende veleden. (afbeelding van een phphulp tut gehaald)

De volgende regels moet u aanpassen aan uw databse:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
include ('../mysql_connect.php');

(regel 143) moet een mysql connectie komen en een database geselecteerd worden
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$data = mysql_query(" SELECT * FROM bestanden WHERE MATCH(naam, username, beschrijving, tags, vak, type) AGAINST('".$find."' IN BOOLEAN MODE)");

(regel 159) bestanden moet veranderd worden naar de tabelnaam en name,username etc. moet veranderd worden door de gewenste velden die doorzocht moeten worden

Wijzigingen
@steen: Ingesprongen
@han: heb de dubbele quotes weggehaalt
Uitleg over fulltext index
Demo en tabel toegevoegd.

Slot
Als u vragen heeft, of iets anders kwijt wild kunt u mij mailen op [email protected]

Veel plezier ermee

Voorbeeld: http://runesofmagic.co.cc/Content/phphulp/

Gesponsorde koppelingen

PHP script bestanden

  1. database-zoekfuncite-met-boolean-mode

 

Er zijn 7 reacties op 'Database zoekfuncite met boolean mode'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Steen
steen
18 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if ($find == "")
{

echo '<p>U heeft geen zoekterm ingevuld';
exit;
}

?>

Dit moet je niet doen, haal de exit weg en maak er een else lus van!

- Je moet nog inspringen
- Plaats even een demo
Han eev
Han eev
18 jaar geleden
 
0 +1 -0 -1
Korte opmerking, leer dit nou eens af:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?PHP
$find
= getMySQLZoekterm("$zoeken2");
// Kan toch beter
$find = getMySQLZoekterm($zoeken2);
?>


Waarom die dubbele quotes om een variabele heen :|

Voor de rest ingenieus, niet getest.
Steen
steen
18 jaar geleden
 
0 +1 -0 -1
Dit script is nog niet helemaal perfect:
Als je een woord zoekt, maar je vergeet één letter vindt hij deze niet meer. Wel met fulltext?
Joren de Wit
Joren de Wit
18 jaar geleden
 
0 +1 -0 -1
Houd er wel rekening mee dat dit gebasseerd is op de fulltext index die enkel beschikbaar is binnen de MyISAM engine van MySQL. Om dit te laten werken zul je dus een fulltext index moeten hebben op de combinatie van kolommen zoals je die in je MATCH opneemt.

Kortom, er zitten dus iets meer haken en ogen aan dan de poster doet vermoeden...

Zie ook deze tutorial over MySQL's fulltext index, voor meer informatie.
Frank -
Frank -
18 jaar geleden
 
0 +1 -0 -1
Zet de basis er ook nog even bij, de tabel met kolommen en de vereiste index. Zonder deze basis doet het script helemaal niets.

Verder is een waarschuwing op zijn plaats dat je hiermee verplicht bent om MyISAM te gebruiken, waar je dus geen relationele database mee kunt bouwen.
Steen
steen
18 jaar geleden
 
0 +1 -0 -1
Hoe kun je er voor zorgen dat als je "agend" i.p.v. "agenda" intypt hij deze wel vindt?

Edit: Of zoeken over meerdere tabellen?
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Klaasjan Boven
Klaasjan Boven
18 jaar geleden
 
0 +1 -0 -1
Het zou nog mooier zijn http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#operator_sounds-like ook te implementeren. Dan kan je met typefouten (geen results )iets echoen als bedoelde u misschien ..... ( al google)

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. database-zoekfuncite-met-boolean-mode

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.