2010-02-01 7 views
1

설명해주기 위해 나와 함께하시기 바랍니다. 스핑크스 GROUP BY

은 내 MYSQL 테이블 구조에 의해 인덱싱 스핑크스

------- ------- -------------- 
tag_id | tag | foreign_id | 
------- ------- -------------- 
1  love  111 
2  blue  222 
3  lover  333 
4  yellow 444 
5  love  555 
6  lov  666 

내가 내가 "사랑"을 쿼리 할 때 스핑크스에서 얻으려고하는 것은이 같은 것입니다 :

love = 2 hit 
lover = 1 hit 

누구나 하나를 가지고 어떻게 할 수 있을지 생각해? 나는 다음과 같은 PHP 코드를 시도했지만 모든 것이 출력은 내가 심지어이 시도 '사랑'

$cl->setGroupDistinct('tag'); 
$cl->setGroupBy('tag', SPH_GROUPBY_ATTR); 
$cl->SetLimits(0, 10, 500); 
$result = $cl->query("love", 'mytags'); 

에 대한 tag_id 단지 무리지만 그것은뿐만 아니라

$cl->setGroupDistinct('tag'); 

내가 스핑크스의 그룹을 생각 작동하지 않았다 by는 이것을 해결하는 데 사용할 수 있지만 꽤 단서가 없습니다. 도움이 대단히 감사합니다! 감사!

답변

0

그룹화하려는 동일한 속성에 setGroupDistinct을 사용하고 싶지 않습니다. 지금까지 내가 말할 수있는 각 태그에 1 경기를 반환

SELECT COUNT(DISTINCT tag) 
FROM my_tags 
GROUP BY tag 

: SQL 용어로 유사 할 것이라고.

setGroupDistinct으로 전화를 제거하거나 고유 한 필드를 외부 ID로 변경하면 (따라서 하나의 항목에 여러 개의 동일한 태그가 필터링되어 필터링 됨) 좋을 것입니다.

0

태그를 계산하고 desc 순서를 지정하려면 setGroupBy 함수에 extra 절을 추가해야합니다.

$cl->setGroupBy('tag', SPH_GROUPBY_ATTR,'@count desc'); 
$result = $cl->query('');