그래서이 쿼리는 https://stackoverflow.com/a/18462040/1768337과 비슷합니다. 보시다시피, 행은 이미 likes에 따라 정렬되어 있습니다. 위의 링크에서 SQL 문을 사용하여 색인을 생성한다고 가정 해 보겠습니다. 이 SQL 문을 정확하게 출력하는 방법이 있습니까? 즉, SQL 문에서 정렬 집합을 유지 관리합니까? 또한 나중에 $s->SetSortMode(SPH_SORT_EXTENDED, '@relevance DESC, rank ASC');
같은 것을 사용할 수 있도록 내가이 시도 Sphinxsearch에서 SQL 순서 지정을 유지합니다.
source popular
{
type = mysql
sql_host = --------
sql_user = --------
sql_pass = --------
sql_db = --------
sql_port = 3306 # optional, default is 3306
sql_query = \
SET @rank=0; \
SELECT *, @rank := @rank + 1 AS rank \
FROM \
(\
SELECT p.id AS id, p.search AS search, COUNT(CASE WHEN li.date > DATE_SUB(CURDATE(), INTERVAL 1 DAY) THEN li.id END) AS daily_likes, COUNT(CASE WHEN li.date > DATE_SUB(CURDATE(), INTERVAL 7 DAY) THEN li.id END) AS weekly_likes, COUNT(li.id) AS total_likes \
FROM `photo` p \
JOIN `like` li \
ON p.id = li.photo_id \
WHERE \
li.date > DATE_SUB(CURDATE(), INTERVAL 30 DAY) \
GROUP BY \
p.id \
) AS dt \
ORDER BY \
case when daily_likes > 3 then daily_likes else 0 end desc, \
case when weekly_likes > 5 then weekly_likes else 0 end desc, \
total_likes DESC \
LIMIT 30
sql_attr_uint = daily_likes
sql_attr_uint = weekly_likes
sql_attr_uint = total_likes
sql_attr_uint = rank
sql_query_info = SELECT * FROM photo WHERE id=$id
}
, 다음과 같은 행을 평가하기 위하여 노력했다. 그러나 사용자 지정 변수가 스핑크스에서 작동하지 않는 것 같습니다.
내 문제는 SQL 문을 색인하고 정확하게 sphinx (php api)를 사용하여 결과를 출력하는 것입니다.
'계급'을 'sql_attr_uint'로 정의 했습니까? – barryhunter
@barryhunter 예 했어요. 인덱서에서 다음과 같은 오류를 표시합니다. 'ERROR : index'popular ': sql_query : SQL 구문에 오류가 있습니다. 'SELECT *, @rank : = @rank + 1 AS rank' 근처에서 사용할 올바른 구문에 대해서는 해당 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. – pewpewlasers
설정 파일에 어떤 종류의 오류가 있어야합니다. 그것은 당신의 파일을 포함하는 데 도움이 될 것입니다. 아마도 pastebin.com을 사용하고 db credintial을 제거해야한다는 것을 기억하십시오. – barryhunter