我有一个用户列表,上面有基本的详细信息id,他们的名字和个人资料照片(链接到照片,实际上)
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL,
`userName` varchar(60) NOT NULL,
`photo` varchar(50) NULL,
`status` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=latin1;
INSERT INTO `users` (`id`, `userName`,`photo`, `status`) VALUES
(1, 'John', 'john.png',1),
(2, 'Jane', 'jane.png',1),
(3, 'Ali', '',1),
(6, 'Bruce', 'bruce.png',1),
(7, 'Martha', '',1),
(8, 'Sidney', '',1),
(10, 'Charlie', 'charlie.png',1),
(12, 'Elisa', '',1),
(14, 'Samantha', 'samantha.png',1),
(15, 'Hannah', 'hannah.png',1),
(16, 'Hannah', '',1),
(17, 'Kevin', 'kevin1.png',1),
(18, 'Kevin', 'kevin2.png',1),
(19, 'Ruth', '',1);并不是所有的用户都有个人资料图片。我想列出这些用户的字母顺序,也显示用户谁有个人资料图片在前面。
这是我写的查询:
select * from users ORDER BY photo DESC ;它根据照片值对用户进行排序,但它们没有按字母顺序显示。
是否有可能列出这些用户,以便所有拥有照片的用户都会以字母顺序显示在列表中的userName的顶部?
SQL小提琴
发布于 2016-10-25 09:17:29
你这里有空的紫罗兰。这样你就可以用这个方法了。
SELECT * FROM users ORDER BY if(photo = '' or photo is null,1,0), userName但是在mysql中,有一个方法可以用(-)命令空值。
SELECT * FROM users ORDER BY -photo DESC, userName ASC这里,由于DESC顺序,照片列数据顺序为空值。
或
SELECT * FROM users ORDER BY
CASE WHEN photo IS NULL THEN 1 ELSE 0 END ASC, userName ASC发布于 2016-10-25 09:09:42
一旦您将''更改为NULL..。
SELECT * FROM users ORDER BY photo IS NULL,username;发布于 2016-10-25 09:04:29
如果你想要第一个没有照片的人,然后是其他人(按字母顺序对这两个组进行排序):
select * from users ORDER BY photo,userName ASC ;等待你的反馈,如果这不是你想要的。
https://stackoverflow.com/questions/40235537
复制相似问题