Tutorials

Zoeken in MySQL tabel

Zoeken in een MySQL tabel.

Pagina 1

De MySQL tabel

Ik heb al eerder een deel geschreven over MySQL FULLTEXT zoeken. Maar, nu dan voor de beginners het zoeken in een MySQL zonder FULLTEXT.

Maak de volgende tabel naam aan:

<?
CREATE TABLE zoek_test (
id INT(11) auto_increment primary key
, tekst TEXT not null
);
?>

Zet de volgende waardes erin:

<?
INSERT INTO zoek_test (tekst) VALUES ('Zoeken in een MySQL tabel');
INSERT INTO zoek_test (tekst) VALUES ('Heb jij al gevonden wat je zocht?');
INSERT INTO zoek_test (tekst) VALUES ('Hoe weergeef ik de zoek resultaten?');
INSERT INTO zoek_test (tekst) VALUES ('Ik zocht en ik vond het resultaat');
?>

Nu heb je dus inhoud om op te zoeken..
Pagina 2

Het zoeken naar een woord

Normaal als je iets uit een database leest doe je dat zo:

<?
mysql> SELECT id,tekst FROM zoek_test WHERE tekst = 'Zoeken in een MySQL tabel';
+----+---------------------------+
| id | tekst |
+----+---------------------------+
| 1 | Zoeken in een MySQL tabel |
+----+---------------------------+
1 row in set (0.00 sec)
?>

Nu gebruik je in plaats van WHERE tekst = 'Zoeken in een MySQL tabel', WHERE tekst LIKE '%Zoeken%' bijvoorbeeld. Je ziet nu dus dat '=' is vervangen met 'LIKE', en dat tussen de single quotes (') twee procent (%) tekens staan. Het woord 'LIKE' betekent, LIJKT OP. De procent tekens geven aan dat het woord niet exact hoeft te kloppen. Als je nu zoekt in de tabel op het woord 'zoek' doe je dat zo:

<?
mysql> select id,tekst FROM zoek_test WHERE tekst LIKE '%zoek%';
+----+-------------------------------------+
| id | tekst |
+----+-------------------------------------+
| 1 | Zoeken in een MySQL tabel |
| 3 | Hoe weergeef ik de zoek resultaten? |
+----+-------------------------------------+
2 rows in set (0.00 sec)
?>

Je ziet 1 resultaat met het exacte woord 'zoek'. Maar je ziet ook een regel met het woord 'zoeken'.

Er is nu dus aangetoond dat het woordt niet 100% exact hoeft te zijn. We kunnen bijvoorbeeld ook op het woord 'resul' zoeken:

<?
mysql> SELECT id,tekst FROM zoek_test WHERE tekst LIKE '%resul%';
+----+-------------------------------------+
| id | tekst |
+----+-------------------------------------+
| 3 | Hoe weergeef ik de zoek resultaten? |
| 4 | Ik zoch en ik vond het resultaat |
+----+-------------------------------------+
2 rows in set (0.01 sec)
?>
Pagina 3

Formulier om mee te zoeken

Dit is een eenvoudige 'search' in een tabel. We kunnen ook maar op 1 veld zoeken omdat er maar 1 content veld in de tabel staat, namelijk tekst.

Gebruik het volgende HTML formulier en noem het zoek.php.

<?
echo '<html>
<head><title>Zoeken</title></head>
<body>

<p><b>Zoek in de database:</b></p>

<p>
<form method="post" action="resultaat.php">
Zoekterm:<br>
<input type="text" name="zoekterm" size="30"><br>
<input type="submit" name="submit" value="Zoeken">
</p>

</BODY>
</HTML>';
?>
Pagina 4

Tonen van het resultaat in PHP

Het zoeken van iets doormiddel een formulier (vorige 'hoofdstuk') vind je natuurlijk overal in de praktijk wanneer er een 'search' wordt gedaan. Om de resultaten te weergeven moet je de query opgeven, uitvoeren, kijken of er een resultaat is en zo ja de resultaten weergeven. Dit doe je zo:

Noem het bestand: resultaat.php
Dit script communiceert met 'zoek.php'.

<?
//-- natuurlijk moet er eerst een connectie met de database worden gemaakt:
if (!@mysql_select_db("databasenaam", @mysql_connect("localhost", "database-user", "database-pass")))
{
echo "Er kan geen database connectie gemaakt worden.";
exit();
}

//-- $_POST['zoekterm'] is de naam van het zoekveld in het formulier wat we
//-- hebben gemaakt in het vorige 'hoofdstuk'. Dit is dus de SQL code:
$sql = "SELECT id,tekst FROM zoek_test WHERE tekst LIKE '%" . mysql_real_escape_string($_POST['zoekterm']) . "%'";

//-- voer de SQL code uit en zet dit in een variabele zodat we zometeen kunnen
//-- kijken of er een resultaat is
$res = mysql_query($sql);

//-- bekijk nu of er een resultaat is, of het zoekwoord dus gevonden is of niet
if (mysql_num_rows($res) >= 1)
{
//-- er is een resultaat gevonden, toon de resultaten via een while () loop
while ($row = mysql_fetch_array($res))
{
echo '<p>Resultaat id: <b>' . $row['id'] . '</b><br>';
echo 'Resultaat tekst: <b>' . htmlspecialchars($row['tekst']) . '</b></p>';
}

echo '<a href="zoek.php" title="zoek opnieuw">zoek opnieuw</a>';
}
//-- als er geen resultaat is gevonden, dus als het zoekwoord niet gevonden is:
else
{
echo '<p>Er is niets gevonden op jou zoekterm: <b>' . $_POST['zoekterm'] . '</b></p>';

echo '<p><a href="zoek.php" title="zoek opnieuw">zoek opnieuw</a></p>';
}
?>

Reacties

0
Nog geen reacties.