我有一个 MySQL 查询,它根据 title
相关性和 title,description,tags
相关性返回给定信息的相关数据。
问题是,当我对剧集列表进行特定搜索时,relevance
和 title_relevance
具有相同的比率。如果它们都相同,我想根据剧集编号对结果进行排序。
示例查询;
SELECT `test_vids`.id ,
`test_vids`.title,
test_vids.tags,
MATCH (title,description,tags) against ('Vikingler 1. Bölüm,Vikingler,Bölüm,vikingler vicky' IN boolean mode) AS relevance,
MATCH (title) against ('Vikingler 1. Bölüm,Vikingler,Bölüm,vikingler vicky' IN boolean mode) AS title_relevance
FROM `test_vids`
WHERE MATCH (title,description,tags) against('Vikingler 1. Bölüm,Vikingler,Bölüm,vikingler vicky' IN boolean mode)
AND `test_vids`.pub > 0
ORDER BY title_relevance DESC,
relevance DESC,
cast(title AS UNSIGNED) DESC
LIMIT 0, 20
示例结果;
id | title | tags | relevance | title_relevance | XXXXXX | Flori Mumajesi Karma Ft Bruno Klajdi Dj Vicky | yabanci,pop,müzik,dinle | 15.147967338562012 | 21.81067657470703 ##WTF IS THIS??? XXXXXX | Vikingler 4. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 3. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 6. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 8. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 10. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 5. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 1. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 7. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 9. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 2. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346
预期结果;
id | title | tags | relevance | title_relevance | XXXXXX | Vikingler 1. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 2. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 3. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 4. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 5. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 6. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 7. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 8. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 9. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346 XXXXXX | Vikingler 10. Bölüm | vikingler vicky | 31.47698974609375 | 6.191696643829346
如何正确订购?
提前致谢!
最佳答案
添加 CONVERT(REPLACE(RIGHT(LEFT(title ,12) ,3),'.',''), UNSIGNED INTEGER)
到您的 ORDER BY
。
SELECT `test_vids`.id ,
`test_vids`.title,
test_vids.tags,
MATCH (title,description,tags) against ('Vikingler 1. Bölüm,Vikingler,Bölüm,vikingler vicky' IN boolean mode) AS relevance,
MATCH (title) against ('Vikingler 1. Bölüm,Vikingler,Bölüm,vikingler vicky' IN boolean mode) AS title_relevance
FROM `test_vids`
WHERE MATCH (title,description,tags) against('Vikingler 1. Bölüm,Vikingler,Bölüm,vikingler vicky' IN boolean mode)
AND `test_vids`.pub > 0
ORDER BY CONVERT(REPLACE(RIGHT(LEFT(title ,12) ,3),'.',''), UNSIGNED INTEGER)
title_relevance DESC,
relevance DESC,
cast(title AS UNSIGNED) DESC
LIMIT 0, 20
小例子:
输入
Vikingler 4. Bölüm
Vikingler 3. Bölüm
Vikingler 6. Bölüm
Vikingler 8. Bölüm
Vikingler 10. Bölüm
Vikingler 5. Bölüm
Vikingler 1. Bölüm
Vikingler 7. Bölüm
Vikingler 9. Bölüm
Vikingler 2. Bölüm
代码
SELECT title
FROM yourtable
ORDER BY CONVERT(REPLACE(RIGHT(LEFT(title ,12) ,3),'.',''), UNSIGNED INTEGER)
输出
title
Vikingler 1. Bölüm
Vikingler 2. Bölüm
Vikingler 3. Bölüm
Vikingler 4. Bölüm
Vikingler 5. Bölüm
Vikingler 6. Bölüm
Vikingler 7. Bölüm
Vikingler 8. Bölüm
Vikingler 9. Bölüm
Vikingler 10. Bölüm
SQL fiddle :http://sqlfiddle.com/#!9/7c74bd/24/0
关于MySQL 智能排序结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46970570/