2016-02-12 3 views
2

У меня есть таблица в MySQL с некоторыми данными, как показано ниже:порядок MySQL двумя столбцами в или-п

id name  first_name 
=============================== 
1 hello  
2   many 
3   alive 
4 persons 

Как я могу сделать результат выглядеть следующим образом

id name  first_name 
=============================== 
3   alive 
1 hello  
2   many 
4 persons 

Итак, то сортировка должна быть буквенной по имени и/или first_name?

ответ

1

Я нашел решение, порядок на должен выглядеть

order by coalesce(name,first_name) 
+0

Это не работает, если значения представляют собой пустые строки, а не нулевые. Решение @ randyh22 работает для нулевой или пустой строки. – randyh22

2

Следующий запрос будет выполнять эту работу.

SELECT * 
FROM nameTable 
ORDER BY IFNULL(name,first_name) 

ИЛИ

SELECT * 
FROM nameTable 
ORDER BY coalesce(name,first_name) 

N: B: Если вы не можете получить доступ к SQL FIDDLE.

CREATE TABLE `nameTable` (
`ID` int(11) NOT NULL AUTO_INCREMENT , 
`name` varchar(50) CHARACTER SET latin1 COLLATE latin1_general_ci NULL DEFAULT NULL , 
`first_name` varchar(50) CHARACTER SET latin1 COLLATE latin1_general_ci NULL DEFAULT NULL , 
PRIMARY KEY (`ID`) 
); 

INSERT INTO `nametable` VALUES ('1', 'hello', null); 
INSERT INTO `nametable` VALUES ('2', null, 'many'); 
INSERT INTO `nametable` VALUES ('3', null, 'alive'); 
INSERT INTO `nametable` VALUES ('4', 'persons', null); 

Примечание:

Основное различие между ними состоит в том, что IFNULL функция принимает два аргумента и возвращает первый, если это не NULL или второй, если первый из них является NULL.

Функция COALESCE может принимать два или более параметров и возвращает первый параметр не NULL, или NULL, если все параметры: null.

+0

Эти решения не работают, если эти значения пустые строки, а не нулевой. Решение @ randyh22 работает для нулевой или пустой строки. – randyh22

0

Создать столбец SortBy, который является объединением двух других столбцов.

SELECT id, `name`, first_name, CONCAT(IFNULL(`name`,''),IFNULL(first_name,'')) AS sortby 
FROM 
table1 
ORDER BY sortby 
0

использование этого

SELECT * FROM A ORDER BY CONCAT(name,first_name) ASC 
+0

Это не работает, если значения являются пустым, а не пустым. Решение @ randyh22 работает для нулевой или пустой строки. – randyh22

Смежные вопросы