だから私はこれに似たクエリを持っています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の順序を維持することさえあります。