我有一张这样的桌子:
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;
╔═════╤═══════════════════════╤════════╗
║ 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' ║
╚═════╧═══════════════════════╧════════╝
运行以下查询:
SELECT DISTINCT type FROM `tags` ORDER BY type DESC结果与我所期望的不一样,ep被排序到顶部,而它应该在cat之后。
╔════════╗
║ type ║
╟────────╢
║ 'ep' ║
║ 'app' ║
║ 'cat' ║
║ 'gen' ║
║ 'spec' ║
║ NULL ║
╚════════╝
我认为这是因为'ep'比其他项都短,但是如何在不对短字符串进行排序之前排序表呢?
在这种特殊情况下,我可以使用每个字符串中的第一个字符进行排序,但是我希望将来的解决方案--在第2种情况下,类型将在以后以相同的字母开头。
发布于 2015-08-05 17:02:25
您的字段是一个enum,mysql根据内部索引值进行排序:
`type` enum('spec','gen','cat','app','ep') DEFAULT NULL
0 1 3 4 5排序desc时,ep首先显示,因为它具有最高的索引值。
https://stackoverflow.com/questions/31838579
复制相似问题