如何按空字符串 ASC 然后按 ID DESC 排序
How to sort by empty string ASC then by ID DESC
出于某种原因,我无法先按空字符串然后按 id DESC 对结果进行排序,
它看起来像 ORDER BY url ASC 按字符串的长度排序。
如何告诉查询按空排序而不是按长度排序,而不是按 id desc 排序?
SELECT * FROM r WHERE r.type IN('product','manual_change') ORDER BY url ASC, id DESC
CREATE TABLE `r` (
`id` int(11) NOT NULL,
`id_type` int(11) NOT NULL,
`type` enum('category','product','manufacturer','manual_change') NOT NULL,
`redirect_type` tinyint(1) NOT NULL,
`url` varchar(300) NOT NULL,
`link_from` varchar(300) NOT NULL COMMENT 'manual change, use url as LINK_TO'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `r` (`id`, `id_type`, `type`, `redirect_type`, `url`, `link_from`) VALUES
(38, 0, 'manual_change', 0, '', ''),
(39, 0, 'manual_change', 0, 'example1.com', ''),
(29, 27406, 'product', 0, 'example11.com', ''),
(42, 0, 'manual_change', 0, 'example111.com', ''),
(41, 27339, 'product', 0, 'example1111.com', ''),
(24, 27382, 'product', 0, 'example1111.com', ''),
(43, 0, 'manual_change', 0, 'example.com', ''),
(22, 27352, 'product', 0, 'example.com', ''),
(20, 27319, 'product', 0, 'example.com', ''),
(19, 27322, 'product', 0, 'example.com', '');
您可以按案例订购:
SELECT *
FROM r
WHERE r.type IN('product','manual_change')
ORDER BY case when r.url='' then r.url end desc,id desc ;
https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=9273bc6070ce3b278e2f65d6f791d1c9
我建议最好使用 null 而不是空字符串
出于某种原因,我无法先按空字符串然后按 id DESC 对结果进行排序, 它看起来像 ORDER BY url ASC 按字符串的长度排序。
如何告诉查询按空排序而不是按长度排序,而不是按 id desc 排序?
SELECT * FROM r WHERE r.type IN('product','manual_change') ORDER BY url ASC, id DESC
CREATE TABLE `r` (
`id` int(11) NOT NULL,
`id_type` int(11) NOT NULL,
`type` enum('category','product','manufacturer','manual_change') NOT NULL,
`redirect_type` tinyint(1) NOT NULL,
`url` varchar(300) NOT NULL,
`link_from` varchar(300) NOT NULL COMMENT 'manual change, use url as LINK_TO'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `r` (`id`, `id_type`, `type`, `redirect_type`, `url`, `link_from`) VALUES
(38, 0, 'manual_change', 0, '', ''),
(39, 0, 'manual_change', 0, 'example1.com', ''),
(29, 27406, 'product', 0, 'example11.com', ''),
(42, 0, 'manual_change', 0, 'example111.com', ''),
(41, 27339, 'product', 0, 'example1111.com', ''),
(24, 27382, 'product', 0, 'example1111.com', ''),
(43, 0, 'manual_change', 0, 'example.com', ''),
(22, 27352, 'product', 0, 'example.com', ''),
(20, 27319, 'product', 0, 'example.com', ''),
(19, 27322, 'product', 0, 'example.com', '');
您可以按案例订购:
SELECT *
FROM r
WHERE r.type IN('product','manual_change')
ORDER BY case when r.url='' then r.url end desc,id desc ;
https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=9273bc6070ce3b278e2f65d6f791d1c9
我建议最好使用 null 而不是空字符串