Metazoeken met AND OR NOT operatoren
Waarschijnlijk is het veel gevraagd. Indien dat het geval is zou ik dolgraag een tutorial of voorbeeld willen doornemen. Helaas kan ik daar echter tot op heden nog niets vinden. Natuurlijk als het vrij eenvoudig uit te leggen is lees ik het graag.
Alvast bedankt!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
<?php require_once("databaseconnectionuploaden.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Zoeken</title>
</head>
<body>
<form form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
Zoeken op trefwoord:<br>
<input name="zoeken" type="text" id="zoekenn" size="30"><p>
<input type="submit" value="zoeken">
</form>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$zoeken = mysql_real_escape_string($_POST['zoeken']);
$zoekexploded = explode(' ', $zoeken);
$like = "";
foreach($zoekexploded as $k=>$v) {
if($k == 0) {
$like .= "`trefwoord` LIKE '%".$v."%' ";
} else {
$like .= "OR `trefwoord` LIKE '%".$v."%' ";
}
}
// je query dan:
$sql = "
SELECT thumbnail, trefwoord
FROM afbeelding
WHERE ".$like."
";
$res = mysql_query($sql);
if(!$res)
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
else
{
if (mysql_num_rows($res) >= 1)
{
while ($row = mysql_fetch_array($res))
{
echo '<img src="'.$row['thumbnail'].'" alt="thumbnail" /></p>';
}
echo "<a href=\"zoeken.php\" title=\"zoek opnieuw\">zoek opnieuw</a>";
}
else
{
echo "<p>Er is niets gevonden op jou zoekterm:<b> $HTTP_POST_VARS[zoeken]</b></p>";
echo "<p><a href=\"zoeken.php\" title=\"zoek opnieuw\">zoek opnieuw</a></p>";
}
}
}
?>
</body>
</html>
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
<?php require_once("databaseconnectionuploaden.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Zoeken</title>
</head>
<body>
<form form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
Zoeken op trefwoord:<br>
<input name="zoeken" type="text" id="zoekenn" size="30"><p>
<input type="submit" value="zoeken">
</form>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$zoeken = mysql_real_escape_string($_POST['zoeken']);
$zoekexploded = explode(' ', $zoeken);
$like = "";
foreach($zoekexploded as $k=>$v) {
if($k == 0) {
$like .= "`trefwoord` LIKE '%".$v."%' ";
} else {
$like .= "OR `trefwoord` LIKE '%".$v."%' ";
}
}
// je query dan:
$sql = "
SELECT thumbnail, trefwoord
FROM afbeelding
WHERE ".$like."
";
$res = mysql_query($sql);
if(!$res)
{
trigger_error(mysql_error().'<br />In query: '.$sql);
}
else
{
if (mysql_num_rows($res) >= 1)
{
while ($row = mysql_fetch_array($res))
{
echo '<img src="'.$row['thumbnail'].'" alt="thumbnail" /></p>';
}
echo "<a href=\"zoeken.php\" title=\"zoek opnieuw\">zoek opnieuw</a>";
}
else
{
echo "<p>Er is niets gevonden op jou zoekterm:<b> $HTTP_POST_VARS[zoeken]</b></p>";
echo "<p><a href=\"zoeken.php\" title=\"zoek opnieuw\">zoek opnieuw</a></p>";
}
}
}
?>
</body>
</html>
Code (php)
te doen? Ik bedoel dus dat als gebruiker AND invoert in de invoer veld de code uitvoert
en bij OR invoeren
fulltext heeft toch ook zo zijn nadelen?
Quote:
Dan ga je dus altijd fulltext gebruiken omdat dat de enige manier is om met relevantie van zoekresultaten te werken...(...) omdat de relevantie van resultaten bij mij zwaar weegt
Verder is het nadeel van MySQL dat de fulltext index alleen in de MyISAM engine beschikbaar is. Hetgeen dus betekent dat je niet meer met foreign key constraints kunt werken omdat deze alleen in de InnoDB engine beschikbaar zijn. Bij andere databases heb je echter geen probleem, zo kent postgreSQL bijvoorbeeld TSearch2 om hiermee te werken.