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)
PHP script in nieuw venster Selecteer het PHP script
1
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)
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
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 zal geen resultaat geven bij woorden minder dan of gelijk aan 3 karakters met het zoekwoord. Daarom zou dit geen resultaat geven:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?
mysql> SELECT msg FROM fulltext_test WHERE MATCH(msg) AGAINST('ooi');
Empty set (0.00 sec)
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?
mysql> SELECT msg FROM fulltext_test WHERE MATCH(msg) AGAINST('phphulp');
Empty set (0.00 sec)
?>



Maar de volgende query dus wel (geeft slechts 2 resultaten met het woord).

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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)
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?
mysql> SELECT msg FROM fulltext_test WHERE MATCH(msg) AGAINST('ex-man');
Empty set (0.00 sec)
?>

Maar extra-werknemer (het bestaat niet maar als voorbeeld) zal wel een resultaat geven.

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
<?
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)
PHP script in nieuw venster Selecteer het PHP script
1
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)
?>

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Fulltext indexes met mysql
  2. Zoeken in een tabel
  3. Samenvatting

PHP tutorial opties

 
 

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.