2009-09-23 6 views
0

브리핑 시스템 용 검색 엔진을 사용하려고합니다.태그가 PHP에서 많은 필드로 검색

나는 관계를 나타내는 3 개의 데이터베이스로 많은 관계 스타일 설정을 사용하고 있습니다. 데이터가 관계가

형성되어있는 태그 briefings_tags입니다 저장됩니다 search_tags 인 브리핑 저장된다

comms_briefings 내가 그것을 반환 어떤 이유로, 그러나 이미 거의 다 완벽한 this code을 가지고있다 브리핑에서 태그가 두 번 이상 나타나면 데이터베이스에서 동일한 행을 여러 번 반복합니다.

$ "complx 문의"

이 일치하는 태그가 두 배 태그 complx 및 문의 사항이있는 행을 반환 할 시스템에 대한

예를 들어, 경우 사용자의 검색 수. 결과가 가장 먼저 나오고 한 번만 나타나는 행으로 결과를 desc로 정렬하길 원합니다.

어떤 아이디어가 있습니까? 이 같은 :

답변

1

뭔가 수행해야합니다

function searchTags($tags) { 

    $tags = explode(' ', $tags); 
    $tagIds = array(); 

    foreach($tags as $key) { 
     $sql = mysql_query("SELECT `id` FROM `search_tags` WHERE `tag` = '".$key."'"); 
     while($r=mysql_fetch_object($sql)) 
      $tagIds[] = $r->id; 
    } 

    $query = mysql_query("SELECT comms_briefings.*, COUNT(*) AS num 
     FROM comms_briefings, briefings_tags 
     WHERE briefings_tags.tag_id IN ('" . implode("','", $tagIds) ."') AND briefings_tags.briefing_id = comms_briefings.id 
      GROUP BY comms_briefines.id 
     ORDER BY num DESC, `created` DESC"); 

    while($r = mysql_fetch_object($query)) { 

     $summation = preg_replace('^(.*)\n(.*)^', '$1\\n$2', $r->summation); 
     $summation = preg_replace('/[\r]+/', '', $summation); 

     echo '<li class="message unread" id="msg-'.$r->id.'">'; 
     echo '<h3><a href="">'.$r->title.'</a></h3>'; 
     echo '<ul class="details"> 
       <li><span>Importance:</span> '.$r->importance.'</li> 
       <li><span>Date:</span> '.$r->created.'</li> 
       <li><span>Summary:</span> '.$summation.'</li> 
      </ul> 
      <div class="clr"></div> 
      </li>'; 
    } 
} 

모든 tagIds 그런 다음 ID로 그룹화 브리핑에서 단일 쿼리를 수행 첫번째 배열로 당겨진다.

+0

greg가 좋지만 오류와 함께 경고가 표시됩니다. 경고 : mysql_fetch_object() : 제공된 인수가 /Applications/MAMP/htdocs/sdg/classes/messages.classes.php의 유효한 MySQL 결과 리소스가 아닙니다. 17 이것은 while 문입니다 –

+0

# 1064 - SQL 구문에 오류가 있습니다. 올바른 문법이 'COUNT (*) AS num WHERE'briefings_tags.tag_id' 근처에서 사용하도록 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. IN ('1,2,5 ') AND'briefing'in 2 行 –

+0

Hmmm 않았다 당신은 모든 인용문을 복사합니까? 그것은 IN ('1', '2', '5')와 같아야합니다. – Greg

관련 문제