首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按MySQL顺序返回可变长度字符串的不正确结果

问按MySQL顺序返回可变长度字符串的不正确结果
EN

Stack Overflow用户
提问于 2015-08-05 16:58:12
回答 1查看 307关注 0票数 1

我有一张这样的桌子:

​

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `tags` (
  `tid` int(11) NOT NULL,
  `name` varchar(25) NOT NULL,
  `type` enum('spec','gen','cat','app','ep') DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `tags` ADD PRIMARY KEY (`tid`);
ALTER TABLE `tags` MODIFY `tid` int(11) NOT NULL AUTO_INCREMENT;

​

代码语言:javascript
复制
╔═════╤═══════════════════════╤════════╗
║ tid │ name                  │ type   ║
╟─────┼───────────────────────┼────────╢
║   1 │ "spike"               │ NULL   ║
║   2 │ "gala dress"          │ 'app'  ║
║   3 │ "s1e1"                │ 'ep'   ║
║   4 │ "dragon"              │ 'spec' ║
║   5 │ "backgroud character" │ 'cat'  ║
║   6 │ "s1e2"                │ 'ep'   ║
║   7 │ "male"                │ 'gen'  ║
║   8 │ "s1e3"                │ 'ep'   ║
║   9 │ "main six"            │ 'cat'  ║
╚═════╧═══════════════════════╧════════╝

​

运行以下查询:

代码语言:javascript
复制
SELECT DISTINCT type FROM `tags` ORDER BY type DESC

结果与我所期望的不一样,ep被排序到顶部,而它应该在cat之后。

​

代码语言:javascript
复制
╔════════╗
║ type   ║
╟────────╢
║ 'ep'   ║
║ 'app'  ║
║ 'cat'  ║
║ 'gen'  ║
║ 'spec' ║
║ NULL   ║
╚════════╝

​

我认为这是因为'ep'比其他项都短,但是如何在不对短字符串进行排序之前排序表呢?

在这种特殊情况下,我可以使用每个字符串中的第一个字符进行排序,但是我希望将来的解决方案--在第2种情况下,类型将在以后以相同的字母开头。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-05 17:02:25

您的字段是一个enum,mysql根据内部索引值进行排序:

代码语言:javascript
复制
`type` enum('spec','gen','cat','app','ep') DEFAULT NULL
             0       1     3     4     5

排序desc时,ep首先显示,因为它具有最高的索引值。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31838579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档