2013-08-28 2 views
0

그래서이 쿼리는 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)를 사용하여 결과를 출력하는 것입니다.

+0

'계급'을 'sql_attr_uint'로 정의 했습니까? – barryhunter

+0

@barryhunter 예 했어요. 인덱서에서 다음과 같은 오류를 표시합니다. 'ERROR : index'popular ': sql_query : SQL 구문에 오류가 있습니다. 'SELECT *, @rank : = @rank + 1 AS rank' 근처에서 사용할 올바른 구문에 대해서는 해당 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. – pewpewlasers

+0

설정 파일에 어떤 종류의 오류가 있어야합니다. 그것은 당신의 파일을 포함하는 데 도움이 될 것입니다. 아마도 pastebin.com을 사용하고 db credintial을 제거해야한다는 것을 기억하십시오. – barryhunter

답변

0

이 문제를 도와 준 덕분에 barryhunter (The Saviour)에게 감사드립니다. 그는 그의 코멘트에서 언급 한대로 SETsql_query_pre이어야합니다. 그래서 내 conf 파일은 다음과 같습니다.

sql_query_pre = SET @rank=0 
sql_query  = \ 
    SELECT *, @rank := @rank + 1 AS rank \ 
    FROM \ 
    (\