我有一个MySQL查询,该查询根据title相关性和title,description,tags相关性返回给定信息的相关数据。

问题是,当我对剧集列表进行特定搜索时,relevancetitle_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_relevance |
XXXXXX | Flori Mumajesi Karma Ft Bruno Klajdi Dj Vicky | yabanci,pop,müzik,dinle | 15.147967338562012 | 21.81067657470703 ## WTF就是这个???
XXXXXX | Vikingler 4.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 3.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 6.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 8.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 10.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 5.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 1.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 7.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 9.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 2.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346


预期结果;

id |标题|标签|相关性| title_relevance |
XXXXXX | Vikingler 1.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 2.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 3.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 4.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 5.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 6.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 7.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 8.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 9.伯伦|维京勒vicky | 31.47698974609375 | 6.191696643829346
XXXXXX | Vikingler 10.伯伦|维京勒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提琴:http://sqlfiddle.com/#!9/7c74bd/24/0

关于mysql - MySQL智能排序结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46970570/

10-11 10:53