Fulltext Search
Auteur: rambo - 20 oktober 2004 - 14:48 - Gekeurd door: Dennisvb - Hits: 13579 - Aantal punten: 3.70 (5 stemmen)
Met dit script kun je zoeken in zogenaamde 'Fulltext' tabellen. Dit is anders dan te zoeken dmv 'LIKE' omdat je daarmee niet in kolom-types TEXT etc. kan zoeken.
Je moet er wel voor zorgen dat je tabel van het type MyIsam is, en je moet bij elke kolom waarin je wilt zoeken, zorgen dat Fulltext 'aanstaat'.
Dit kun je dmv deze query doen:
ALTER TABLE `TABEL NAAM` ADD FULLTEXT (
`KOLOM 1` ,
`KOLOM 2`
)
ALTER TABLE `TABEL NAAM` ADD FULLTEXT ( `KOLOM 1` , `KOLOM 2` )
In dit voorbeeld maak ik gebruik van de volgende tabel:
CREATE TABLE `nieuws` (
`nieuws_id` int(11) NOT NULL auto_increment,
`categorie` varchar(255) NOT NULL default '',
`onderwerp` varchar(255) NOT NULL default '',
`datum` date NOT NULL default '0000-00-00',
`member_id` int(11) NOT NULL default '0',
`intro` tinytext NOT NULL,
`nieuwsbericht` text NOT NULL,
PRIMARY KEY (`nieuws_id`),
FULLTEXT KEY `volledigetekst` (`onderwerp`,`intro`,`nieuwsbericht`)
) TYPE=MyISAM AUTO_INCREMENT=5 ;
CREATE TABLE `nieuws` ( `nieuws_id` int(11) NOT NULL auto_increment, `categorie` varchar(255) NOT NULL default '', `onderwerp` varchar(255) NOT NULL default '', `datum` date NOT NULL default '0000-00-00', `member_id` int(11) NOT NULL default '0', `intro` tinytext NOT NULL, `nieuwsbericht` text NOT NULL, PRIMARY KEY (`nieuws_id` ), FULLTEXT KEY `volledigetekst` (`onderwerp` ,`intro` ,`nieuwsbericht` )) TYPE=MyISAM AUTO_INCREMENT=5 ;
Ik heb gemerkt dat het pas begint te werken als er meer dan 3 rows zijn, dus.....zorg daarvoor
Ik hoop dat het een beetje duidelijk is...
Je kunt de Fulltext Search voor nog meer doeleinden gebruiken dan een zoekfunctie, maar in dit geval gebruik ik het zo.
|
Code: |
<?php
mysql_connect("host", "gebruiker", "wachtwoord"); //Connecten met DB
mysql_select_db("database_naam");
if(isset($_POST['submit'])) {
?>
<table>
<tr>
<td>
<b>Categorie:</b>
</td>
<td>
<b>Titel:</b>
</td>
<td>
<b>Score:</b>
</td>
</tr>
<?php
$query = "SELECT * FROM tabel WHERE MATCH (onderwerp, intro, nieuwsbericht) AGAINST ('" . $_POST['zoekwoord'] . "')";
$resultaat = mysql_query($query) or die(mysql_error()); //Query uitvoeren
if(mysql_num_rows($resultaat)== 0) { //Mysql_num_rows geeft 0 als er geen resultaten zijn, of als de zoekterm in meer dan 50% van de resultaten voorkomt.
echo "<tr>
<td>Geen of te veel resultaten, maak je zoekopdracht specifieker.</td>
</tr>
";
} else {
while($zoek = mysql_fetch_assoc($resultaat)) {
?>
<tr>
<td>
<?php
echo $zoek['categorie'];
?>
</td>
<td>
<?php
echo $zoek['onderwerp'];
?>
</td>
</tr>
<?php
}
} //einde 'aantal'-lus
echo "</table>";
} else {
//Formulier weergeven
?>
<form method="post" action="">
Zoeken naar: <input type="text" name="zoekwoord"/><br/>
<input type="submit" name="submit" value="Zoek"/>
</form>
<?php
}
?>
<?php mysql_connect("host", "gebruiker", "wachtwoord"); //Connecten met DB if(isset($_POST['submit'])) { ?> <table> <tr> <td> <b>Categorie:</b> </td> <td> <b>Titel:</b> </td> <td> <b>Score:</b> </td> </tr> <?php $query = "SELECT * FROM tabel WHERE MATCH (onderwerp, intro, nieuwsbericht) AGAINST ('" . $_POST['zoekwoord'] . "')"; if(mysql_num_rows($resultaat)== 0) { //Mysql_num_rows geeft 0 als er geen resultaten zijn, of als de zoekterm in meer dan 50% van de resultaten voorkomt. <td>Geen of te veel resultaten, maak je zoekopdracht specifieker.</td> </tr> "; } else { ?> <tr> <td> <?php ?> </td> <td> <?php ?> </td> </tr> <?php } } //einde 'aantal'-lus } else { //Formulier weergeven ?> <form method="post" action=""> Zoeken naar: <input type="text" name="zoekwoord"/><br/> <input type="submit" name="submit" value="Zoek"/> </form> <?php } ?>
Download code (.txt)
|
|
Stemmen |
Niet ingelogd. |
|