簡體   English   中英

mysql-基於空值和空值的排序列表

[英]mysql- sort list based on empty and null values as last in column

我有一張包含基本詳細信息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字段

''更改為NULL后...

SELECT * FROM users ORDER BY photo IS NULL,username;

您在這里有空洞。 因此,您可以使用這種方式。

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

如果您想要第一個沒有圖片的人然后另一個(在按字母順序對這兩個組進行排序時):

select * from users ORDER BY photo,userName ASC ;

如果反饋不完全符合您的要求,請稍候。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM