Een lege waarde genereren voor een boolean search
Het werkt precies zoals ik het wil hebben.
Het probleem is echter wanneer ik in één veld geen waarde invoer dan wordt er niets gevonden. Lijkt mij ook logisch als je de AND operator gebruikt. Gebruik ik inplaats van de AND operator de OR operator dan krijg ik een zoekresultaat waarbij de twee waarden niet alleen beide in een row staan maar ook waar één van de waarden in een row staan, dit wil ik dus niet.
Wat ik zoek is wanneer een zoekveld geen waarde krijgt dat de lege waarde wordt vervangen door een teken/operator of e.d. waardoor het mogelijk is om ook met 1 veld te kunnen zoeken.
Ik zit zelf te denken aan 'if $keywords heeft geen waarde dan $keywords=???' Bij de vraagtekens weet ik niet wat daar in te vullen.
Ik hoop dat ik een beetje duidelijk ben. Zo niet vraag rustig door.
Iemand misschien een idee hoe dit op te lossen. B.v.d.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$keywords = ???? ;
mysql_select_db($database_museum, $museum);
$query_Recordset1 = sprintf("SELECT rapporten.rapnaam, rapporten.omschrijving, rapporten.vliegtuig_type, rapporten.auteur, rapporten.datum, rapporten.bestellen FROM `rapporten` WHERE MATCH (`omschrijving`)\n"
. "AGAINST ('$keywords' IN BOOLEAN MODE) AND MATCH (`vliegtuig_type`)\n"
. "AGAINST ('$keywordsvl' IN BOOLEAN MODE) ", GetSQLValueString($colname_Recordset1, "text"));
$Recordset1 = mysql_query($query_Recordset1, $museum) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
$keywords = ???? ;
mysql_select_db($database_museum, $museum);
$query_Recordset1 = sprintf("SELECT rapporten.rapnaam, rapporten.omschrijving, rapporten.vliegtuig_type, rapporten.auteur, rapporten.datum, rapporten.bestellen FROM `rapporten` WHERE MATCH (`omschrijving`)\n"
. "AGAINST ('$keywords' IN BOOLEAN MODE) AND MATCH (`vliegtuig_type`)\n"
. "AGAINST ('$keywordsvl' IN BOOLEAN MODE) ", GetSQLValueString($colname_Recordset1, "text"));
$Recordset1 = mysql_query($query_Recordset1, $museum) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
?>
De beste oplossing is denk ik om de query op te bouwen afhankelijk van welke waardes gevuld zijn.
Gewijzigd op 11/09/2013 13:40:49 door Ger van Steenderen
Je kunt beter drie query's opstellen in PHP: een voor MATCH x, een voor MATCH y en een voor MATCH x AND MATCH y.
Ik begrijp dat dat de oplossing erop neerkomt dat; indien geen waarde in veld1 dan alleen zoeken in veld2 etc..
De uiteindelijke versie zal vijf zoekvelden hebben dus om alle zoekvarianten te beschrijven zal een hele klus zijn.
Mijn PHP/MYSQL kennis is van een beginner daarom mijn vraag of het mogelijk is om een kleine voorbeeld query te schrijven om mij in de goede richting te duwen. B.v.d.
MATCH (omschrijving) AGAINST ('$keywords' IN BOOLEAN MODE)
en/of
MATCH (vliegtuig_type) AGAINST ('$keywordsvl' IN BOOLEAN MODE)
Hierdoor benut je de mogelijkheden van de fulltext search van MySQL niet optimaal. Stel dat 'Boeing 747' voorkomt in de drie kolommen rapporten.rapnaam, rapporten.omschrijving én rapporten.vliegtuig_type. Dan zou dát record hoger moeten worden getoond dan andere records waarbij 'Boeing 747' alleen voorkomt in de kolom rapporten.vliegtuig_type.
Een full-text search doet dat automatisch, zolang je maar de fulltext index goed zet. De query krijgt dan de volgende structuur: