dim*_*414 15 mysql sql sorting
我正在尝试对标题列表进行排序,但目前有一大块标题以"The"开头.我希望忽略'The',以及解决第二个词的问题.这可能在SQL中,还是我必须在前端进行自定义工作?
例如,当前排序:
会更好地排序:
几乎就像记录存储为'Fountain,The'等.但是,如果可以的话,我不想以那种方式存储它们,这当然是问题的症结所在.
Rob*_*ley 12
最好是有一个计算列来执行此操作,以便您可以索引计算列并按此顺序.否则,排序将是很多工作.
那么你可以将你的计算列作为:
CASE WHEN title LIKE 'The %' THEN stuff(title,1,4,'') + ', The' ELSE title END
Run Code Online (Sandbox Code Playgroud)
编辑:如果MySQL中没有STUFF,则使用RIGHT或SUBSTRING删除前4个字符.但是如果可能的话,仍然尝试使用计算列,以便索引可以更好.同样的逻辑应适用于撕掉"A"和"An".
抢
就像是:
ORDER BY IF(LEFT(title,2) = "A ",
SUBSTRING(title FROM 3),
IF(LEFT(title,3) = "An ",
SUBSTRING(title FROM 4),
IF(LEFT(title,4) = "The ",
SUBSTRING(title FROM 5),
title)))
Run Code Online (Sandbox Code Playgroud)
但考虑到执行此操作的开销超过几次,您最好将标题排序值存储在另一列中...
我想你可以做类似的事情
ORDER BY REPLACE(TITLE, 'The ', '')
Run Code Online (Sandbox Code Playgroud)
尽管这会将任何出现的 'The' 替换为 '',而不仅仅是第一个 'The',尽管我认为这不会有太大影响。