我有一个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
如何正确订购?
提前致谢!
答案 0 :(得分:0)
将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