回答

收藏

高级MySQL按字母顺序排序的前缀?

技术问答 技术问答 211 人阅读 | 0 人回复 | 2023-09-12

对不起,如果你已经回答了这个问题,我已经进行了广泛的搜索,但我没有找到答案(可能是因为我不确定措辞是否正确?& \8 T  B' J& Y7 @( R
是否可以sort_by设置前缀的字母顺序?例如,我在一个表中有一个大学列表。一些大学Universityof(如剑桥大学)为前缀,而其他大学则以(如达勒姆大学)为前缀。MySQL定义一个被忽视的前缀吗?! ]9 T8 y' U9 P
例如,以下列表: D: R: Y4 i* x
University of CambridgeUniversity of BristolDurham Universitykings College London应该命令
. a2 B# T% t& ~% a! k- |* W! IUniversity of BristolUniversity of CambridgeDurham UniversityKings College London               
8 I7 N7 \* L. H8 v6 o% m2 a$ a    解决方案:                                                               
' ^  }2 u6 s- N  N                                                                可以这样做:) H/ b* x" Z# A0 A
ORDER BY IF(SUBSTRING(name,1,14) = 'University of ',SUBSTRING(name,15),name)在此表上创建视图,name_value向IF()上面的表达式投射了一个额外的列,这可能是个好主意。然后,您可以根据此列进行排序和选择,而无需污染您的查询IF()。
- u. Y/ s/ W7 M& y示例视图,假设大学名称存储在列中name:) g$ I, T1 B" q% d. r6 h
CREATE VIEW Universities AS    SELECT        list_universities.*,       IF(SUBSTRING(name,1,14) = 'University of  SUBSTRING(name,15)         name) AS name_value    FROM list_universities;然后,你可以从Universities进行相同的选择list_universities,除此之外,还会有额外的一个name_value列出供您选择或排序。
- D+ G) p9 `5 h$ Z; b0 J请注意,这种方法(以及ORDER BY IF(...))任何索引都不能使用name提高排序性能。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则