가능한 중복 :
PHP MySQL Search And Order By Relevancy어떻게 단어 우선 순위의 relevence에 의해 MySQL의 검색 결과를 정렬하는
안녕하세요, 이름과 같은 필드를 포함하는 여러 열이있는 테이블이
, 주소, 회사 등. 누군가 "microsoft john"을 검색한다고합시다. 나는 "microsoft"를 포함하는 결과가 먼저 나타나야하고, 그 다음에 john을 포함하는 결과가 나타나기를 바랍니다. 그 반대의 경우도 마찬가지 쿼리
내 PHP 코드는 "존 마이크로 소프트"인 경우 :
$searchitems=explode(" ", $trimmed);
//print_r($searchitems);
$so = $_GET['so']=='2'?"2":"1";
$clause = $so=='2'?"AND":"OR";
include("dbconnect.php");
// Build SQL Query
$query = "select FirstName,LastName,course,Department,batch,City,companyjob,companylocation,
companyposition,coursename,institutename,coursename2,institutename2,coursename3,
institutename3 from alumni WHERE ";
for($i=0;$i<count($searchitems);$i++)
{
$queryappend .= "(FirstName LIKE '".$searchitems[$i]."%' OR LastName LIKE '".$searchitems[$i]."%'
OR City LIKE '".$searchitems[$i]."%' OR CountryorRegion LIKE '".$searchitems[$i]."%'
OR companyjob LIKE '".$searchitems[$i]."%' OR companylocation LIKE '".$searchitems[$i]."%'
OR coursename LIKE '".$searchitems[$i]."%' OR institutename LIKE '".$searchitems[$i]."%'
OR coursename2 LIKE '".$searchitems[$i]."%' OR institutename2 LIKE '".$searchitems[$i]."%')";
if($i<count($searchitems)-1) $queryappend .= $clause;
}
$query .=$queryappend;
MYSQL이 ID로 결과를 주문한다하는 문제 ... 일부 높은 평가 결과가 될 수 있기 때문에, 그것은 재미 있습니다 스택에 깊이 붙어 있습니다. btw, phpmyadmin 검색에는 동일한 결함이 있습니다.
좋습니다. 예를 들어
를 검색하는 이런 종류 스키마 더 적합 사용할 수 있습니다 있지만
뭔가 같은 ....
는 확실하지가 하나 PHP 또는 phpMyAdmin을의 결함이다. 귀하의 진술에 __any__ ORDER BY 절이 전혀 표시되지 않으므로 반환 된 순서는 항상 순전히 임의적입니다 (심지어 ID로 보장되지 않습니다) –
답장을 보내 주셔서 감사합니다. 검색 쿼리에서 단어 순서를 ORDER BY해야합니다. 나의 예에서 말했듯이 첫 번째 $ searchitems가 마이크로 소프트이면 마이크로 소프트를 포함하는 모든 결과가 먼저 표시되어야한다. (마이크로 소프트 결과는 다음 $ searchitems 등으로 더 주문할 수 있습니다). 그 목적을 망칠 수있는대로 임의의 순서를 추가 할 수는 없습니다. – hiprakhar
추천 한 페이지 http://stackoverflow.com/questions/344199/php-mysql-search-and-order-by-relevancy는 검색어 문자열에서 개별 단어를 검색하도록 요청하는 것입니다. 나는 explode() 함수를 사용하여 그 효과를 얻었습니다. – hiprakhar