ok. im answering my own question here. answer is "this sucks". I wrote some nasty ruff code just to get the job done. but it invoves alot of sql queries and alot o recursion.
<?php include_once('database_class.egn'); function search_string($field, $keyword, $join = 'OR') { if (!is_array($keyword)) $keyword = explode(' ', $keyword); if (!is_array($field) OR !is_array($keyword)) return ; foreach($field as $f_pos => $f_val) { unset($query); foreach($keyword as $k_pos => $k_val) if ($k_val) $query[] = "$f_val LIKE '%$k_val%'"; $return[] = implode(" $join ", $query); } if (isset($return)) return 'WHERE ( ('. implode(') OR (', $return) .') )'; } function relevent_query($search, $keyword, $first = 1 ) { $keyword = explode(' ', $keyword); $tmp_key = $keyword; static $query; if ( $first ) { $tmp = implode(' ', $tmp_key); $query[strlen($tmp)][$tmp] = search_string($search, $tmp, 'AND'); } if ( count($tmp_key) <= 1 ) { $tmp = array(); foreach( $query as $pos => $val ) foreach( $val as $q_pos => $q_val ) $tmp[] = $q_val; return $tmp; } for( $count = 0; $count <= count($tmp_key); $count++ ) { $tmp_key = $keyword; unset($tmp_key[$count]); $tmp = implode(' ', $tmp_key); $query[strlen($tmp)][$tmp] = search_string($search, $tmp, 'AND'); relevent_query($search, implode(' ', $tmp_key), $first + 1); } $tmp = array(); foreach( $query as $pos => $val ) foreach( $val as $q_pos => $q_val ) $tmp[] = $q_val; return $tmp; } $search[] = 'search_query'; $search[] = 'search_engine'; $keyword = 'ab cc ba'; foreach( relevent_query($search, $keyword) as $pos => $val ) foreach( $db->select_array('', 'search', $val) as $db_pos => $db_val ) $id[$db_val['search_id']] = $db_val['search_query']; foreach( $db->select_array('', 'search', '') as $pos => $val ) { $search_query[$val['search_id']] = $val['search_query']; $search_engine[$val['search_id']] = $val['search_engine']; } foreach( $id as $pos => $val ) echo "{$search_engine[$pos]} : {$search_query[$pos]} <br>"; ?> that does these queries WHERE ( (search_query LIKE '%ab%' AND search_query LIKE '%cc%' AND search_query LIKE '%ba%') OR (search_engine LIKE '%ab%' AND search_engine LIKE '%cc%' AND search_engine LIKE '%ba%') ) WHERE ( (search_query LIKE '%cc%' AND search_query LIKE '%ba%') OR (search_engine LIKE '%cc%' AND search_engine LIKE '%ba%') ) WHERE ( (search_query LIKE '%ab%' AND search_query LIKE '%ba%') OR (search_engine LIKE '%ab%' AND search_engine LIKE '%ba%') ) WHERE ( (search_query LIKE '%ab%' AND search_query LIKE '%cc%') OR (search_engine LIKE '%ab%' AND search_engine LIKE '%cc%') ) WHERE ( (search_query LIKE '%ba%') OR (search_engine LIKE '%ba%') ) WHERE ( (search_query LIKE '%cc%') OR (search_engine LIKE '%cc%') ) WHERE ( (search_query LIKE '%ab%') OR (search_engine LIKE '%ab%') ) nasty eh? any better idea's. I hope so .. -- Chris Lee [EMAIL PROTECTED] "Chris Lee" <[EMAIL PROTECTED]> wrote in message [EMAIL PROTECTED]">news:[EMAIL PROTECTED]... > if I give the user a search and he enters 'cat dog' I am going to want to > find all the results that have the word 'cat' or 'dog' in them, but I want > all the results that have 'cat' and 'dog' at the beginning of the results > because these would be more relevent. now how I see it is this, it aint > pretty. > > $result = select * from product where product_feature like '%cat%' and > product_feature like '%dog%' > foreach( $result as $pos => $val ) > $name[$val['product_id']] = $val['product_name'] > $result = select * from product where product_feature like '%cat%' or > product_feature like '%dog%' > foreach( $result as $pos => $val ) > $name[$val['product_id']] = $val['product_name'] > foreach( $name as $pos => $val ) > echo "$val <br>"; > > this will put the 'AND' before the 'OR'. but its not nice, would be nice if > I could do this with one simple query. this is only with two keywords. with > three its gets exponentially nasty. > > 'cat dog mouse' > > $result = select * from product where product_feature like '%cat%' and > product_feature like '%dog%' and product_feature like '%mouse%' > foreach( $result as $pos => $val ) > $name[$val['product_id']] = $val['product_name'] > $result = select * from product where product_feature like '%cat%' and > product_feature like '%dog%' > foreach( $result as $pos => $val ) > $name[$val['product_id']] = $val['product_name'] > $result = select * from product where product_feature like '%cat%' and > product_feature like '%mouse%' > foreach( $result as $pos => $val ) > $name[$val['product_id']] = $val['product_name'] > $result = select * from product where product_feature like '%dog%' and > product_feature like '%mouse%' > foreach( $result as $pos => $val ) > $name[$val['product_id']] = $val['product_name'] > $result = select * from product where product_feature like '%cat%' or > product_feature like '%dog%' or product_feature like '%mouse%' > foreach( $result as $pos => $val ) > $name[$val['product_id']] = $val['product_name'] > foreach( $name as $pos => $val ) > echo "$val <br>"; > > ouch, this is just nasty, not good. there must be a better way. accually > writing code to take a dynamic number of keywords is guna be ugly. > > any SQL idea's ? yes I know this is a php forum, but its related. > > -- > > Chris Lee > [EMAIL PROTECTED] > > > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]