0

だから私はこれに似たクエリを持っていますhttps://stackoverflow.com/a/18462040/1768337そして、ご覧のとおり、行はすでに好みに従って並べられています。上記のリンクの sql ステートメントを使用してインデックスを作成するとします。このSQL文が与えるものを正確に出力する方法はありますか? つまり、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
}

後で のようなものを使用できるように、これを試しました$s->SetSortMode(SPH_SORT_EXTENDED, '@relevance DESC, rank ASC');。ただし、sphinx ではカスタム変数が機能しないようです。

したがって、私の問題は、SQLステートメントにインデックスを付け、sphinx(php api)を使用して正確に出力することです-SQLの順序を維持することさえあります。

4

1 に答える 1

0

この問題を解決してくれたbarryhunter (The Savior) に感謝します。彼がコメントで言及しているSETように、sql_query_pre. したがって、私のconfファイルは次のようになります。

sql_query_pre   = SET @rank=0
sql_query       = \
    SELECT *, @rank := @rank + 1 AS rank \
    FROM \
     ( \
于 2013-08-28T16:19:25.287 に答える