Zoeken in een tabel
Als je iets zou zoeken in de database, zou je dit normaal doen met deze query: (je wilt een zin met het woord ooit erin).
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
mysql> SELECT msg FROM fulltext_test WHERE msg LIKE '%ooit%';
+-------------------------------------+
| msg |
+-------------------------------------+
| phphulp, zoals php ooit bedoelt was |
+-------------------------------------+
1 row in set (0.00 sec)
?>
mysql> SELECT msg FROM fulltext_test WHERE msg LIKE '%ooit%';
+-------------------------------------+
| msg |
+-------------------------------------+
| phphulp, zoals php ooit bedoelt was |
+-------------------------------------+
1 row in set (0.00 sec)
?>
Omdat het veld msg nu geïndexeerd is (immers met de MySQL functie FULLTEXT()) kun je het volgende doen. Je doet eigenlijk het volgende: “Je MATCHed een geïndexeerde kolom AGAINST een waarde”.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
mysql> SELECT msg FROM fulltext_test WHERE MATCH(msg) AGAINST('ooit');
+-------------------------------------+
| msg |
+-------------------------------------+
| phphulp, zoals php ooit bedoelt was |
+-------------------------------------+
1 row in set (0.00 sec)
?>
mysql> SELECT msg FROM fulltext_test WHERE MATCH(msg) AGAINST('ooit');
+-------------------------------------+
| msg |
+-------------------------------------+
| phphulp, zoals php ooit bedoelt was |
+-------------------------------------+
1 row in set (0.00 sec)
?>
MySQL zal geen resultaat geven bij woorden minder dan of gelijk aan 3 karakters met het zoekwoord. Daarom zou dit geen resultaat geven:
Code (php)
Er zal ook geen resultaat getoond worden als het zoekwoord in meer dan 50% van de tabel gevonden word. Dit zal daarom geen resultaat geven (phphulp staat in elke regel, meer dan 50% dus):
Code (php)
Maar de volgende query dus wel (geeft slechts 2 resultaten met het woord).
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?
mysql> SELECT msg FROM fulltext_test WHERE MATCH(msg) AGAINST('moeten');
+---------------------------------------------------------+
| msg |
+---------------------------------------------------------+
| 4 uur phphulp, dat zouden meer mensen moeten doen |
| altijd weer die phphulp, het zou verboden moeten worden |
+---------------------------------------------------------+
2 rows in set (0.00 sec)
?>
mysql> SELECT msg FROM fulltext_test WHERE MATCH(msg) AGAINST('moeten');
+---------------------------------------------------------+
| msg |
+---------------------------------------------------------+
| 4 uur phphulp, dat zouden meer mensen moeten doen |
| altijd weer die phphulp, het zou verboden moeten worden |
+---------------------------------------------------------+
2 rows in set (0.00 sec)
?>
Hyperante zoekwoorden worden beschouwd als twee woorden. We zoeken op ex-man. Dit wordt helaas beschouwd als een deels woord (dus een woord minder dan of gelijk aan 3 karakters). De volgende query geeft dus geen resultaat.
Code (php)
Maar extra-werknemer (het bestaat niet maar als voorbeeld) zal wel een resultaat geven.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
mysql> SELECT msg FROM fulltext_test WHERE MATCH(msg) AGAINST('extra-werknemer')
;
+-------------------------------------------------------------------------------
--+
| msg
|
+-------------------------------------------------------------------------------
--+
| phphulp, bent u binnenkort ook een ex man en heeft u een extra-werkgever nodig
? |
+-------------------------------------------------------------------------------
--+
1 row in set (0.00 sec)
?>
mysql> SELECT msg FROM fulltext_test WHERE MATCH(msg) AGAINST('extra-werknemer')
;
+-------------------------------------------------------------------------------
--+
| msg
|
+-------------------------------------------------------------------------------
--+
| phphulp, bent u binnenkort ook een ex man en heeft u een extra-werkgever nodig
? |
+-------------------------------------------------------------------------------
--+
1 row in set (0.00 sec)
?>
Je kunt ook op twee woorden tegelijk zoeken. Dit doe je door in de functie AGAINST() woorden te scheiden van een komma. Voorbeeld:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?
mysql> SELECT msg FROM fulltext_test WHERE MATCH(msg) AGAINST('elke, bedoelt');
+-------------------------------------+
| msg |
+-------------------------------------+
| phphulp, zoals php ooit bedoelt was |
| elke klus, een phphulp klus |
+-------------------------------------+
2 rows in set (0.00 sec)
?>
mysql> SELECT msg FROM fulltext_test WHERE MATCH(msg) AGAINST('elke, bedoelt');
+-------------------------------------+
| msg |
+-------------------------------------+
| phphulp, zoals php ooit bedoelt was |
| elke klus, een phphulp klus |
+-------------------------------------+
2 rows in set (0.00 sec)
?>
« vorige pagina | volgende pagina »