renegeuze
%Europe/Berlin %482 %2009, 12:34
Hoi,
Ik ben bezig met een interne zoekfunctie op een website met instant zoekresultaten en het werkt op zich allemaal prima maar op 1 punt kom ik er niet uit zoals ik dat zou willen.
Ik zal jullie niet lastigvallen met wat die zoekbox allemaal al wel kan en alleen maar even een korte uitleg geven op 2 onderdelen.
1 onderdeel is het zoeken naar namen van geregistreerde gebruikers in een bestaande database.
Ik ben geen php guru maar daar heb ik het volgende voor in elkaar weten te knutselen.
function findUsers($find,$limit=15){
$search = "user_name LIKE '%%' ";
if($arr = explode(" ", $find)){
foreach ($arr as $str){
$search .= "AND user_name LIKE '%{$str}%' ";
}
}
$res = mysql_query("SELECT user_name,id FROM rankings_personal WHERE {$search} ORDER BY user_name LIMIT {$limit}");
$found[] = array();
while ($item = mysql_fetch_assoc($res)){
$found[] = array("type"=>"user","id"=>$item['id'],"name"=>$item['user_name']);
}
return $found;
}
Dit werkt dus wel en is ongeveer het doel.
Het 2e onderdeel is het probleem.
Ik wil een zelfde functie in elkaar "hacken" maar dan niet voor een database maar een array in php.
Belangrijk is dus dat spaties eigenlijk worden gezien als "AND string contains ..."
Tot nog toe kom ik niet verder dan een OR string contains.
Is er iemand die mij kan helpen?8~
Stel dat alle php oplossing die kunnen worden verzonnen "zwaarder" zijn voor de server dan een simpele DB query of meer dan 50 regels code zijn dan ga ik dit gewoon omzetten naar een tabel. Maar liever niet.
Hier de code zoals ik dat nu heb. Commented out is de OR versie.
function findPages($find,$limit=15){
$found[] = array();
$pages = array(
'tribe' => array(
'url' => HOST.'tribe/',
'name' => 'Tribe',
'keys' => 'tribe'
),
'tribenews' => array(
'url' => HOST.'news/tribe/',
'name' => 'Tribe News',
'keys' => 'tribenews'
),
'guide' => array(
'url' => HOST.'guide/',
'name' => 'Guide',
'keys' => 'guide help'
)
);
$i = 0;
foreach($pages as $page){
/*
if($pieces = explode(" ", $find)){
foreach($pieces as $piece){
if(stristr($page['keys'],$piece)){
$found[$i] = array("type"=>"page","page"=>$page['name'],"url"=>$page['url']);
}
}
}
$i++;
*/
if(stristr($page['keys'],$find)){
$found[] = array("type"=>"page","page"=>$page['name'],"url"=>$page['url']);
}
}
return $found;
}
Hulp bij het mooier maken van de eerste functie is uiteraard ook welkom ;)
Alvast bedankt!
Ik ben bezig met een interne zoekfunctie op een website met instant zoekresultaten en het werkt op zich allemaal prima maar op 1 punt kom ik er niet uit zoals ik dat zou willen.
Ik zal jullie niet lastigvallen met wat die zoekbox allemaal al wel kan en alleen maar even een korte uitleg geven op 2 onderdelen.
1 onderdeel is het zoeken naar namen van geregistreerde gebruikers in een bestaande database.
Ik ben geen php guru maar daar heb ik het volgende voor in elkaar weten te knutselen.
function findUsers($find,$limit=15){
$search = "user_name LIKE '%%' ";
if($arr = explode(" ", $find)){
foreach ($arr as $str){
$search .= "AND user_name LIKE '%{$str}%' ";
}
}
$res = mysql_query("SELECT user_name,id FROM rankings_personal WHERE {$search} ORDER BY user_name LIMIT {$limit}");
$found[] = array();
while ($item = mysql_fetch_assoc($res)){
$found[] = array("type"=>"user","id"=>$item['id'],"name"=>$item['user_name']);
}
return $found;
}
Dit werkt dus wel en is ongeveer het doel.
Het 2e onderdeel is het probleem.
Ik wil een zelfde functie in elkaar "hacken" maar dan niet voor een database maar een array in php.
Belangrijk is dus dat spaties eigenlijk worden gezien als "AND string contains ..."
Tot nog toe kom ik niet verder dan een OR string contains.
Is er iemand die mij kan helpen?8~
Stel dat alle php oplossing die kunnen worden verzonnen "zwaarder" zijn voor de server dan een simpele DB query of meer dan 50 regels code zijn dan ga ik dit gewoon omzetten naar een tabel. Maar liever niet.
Hier de code zoals ik dat nu heb. Commented out is de OR versie.
function findPages($find,$limit=15){
$found[] = array();
$pages = array(
'tribe' => array(
'url' => HOST.'tribe/',
'name' => 'Tribe',
'keys' => 'tribe'
),
'tribenews' => array(
'url' => HOST.'news/tribe/',
'name' => 'Tribe News',
'keys' => 'tribenews'
),
'guide' => array(
'url' => HOST.'guide/',
'name' => 'Guide',
'keys' => 'guide help'
)
);
$i = 0;
foreach($pages as $page){
/*
if($pieces = explode(" ", $find)){
foreach($pieces as $piece){
if(stristr($page['keys'],$piece)){
$found[$i] = array("type"=>"page","page"=>$page['name'],"url"=>$page['url']);
}
}
}
$i++;
*/
if(stristr($page['keys'],$find)){
$found[] = array("type"=>"page","page"=>$page['name'],"url"=>$page['url']);
}
}
return $found;
}
Hulp bij het mooier maken van de eerste functie is uiteraard ook welkom ;)
Alvast bedankt!