[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка mysql по нескольким значениям
Helram
Привет, у меня есть таблица с данными (id,name,name2)

id,name,name2
1, 'Владимир', 'Роман'
2, 'Пётр', 'Алексей'
3, 'Степан', 'Дмитрий'
4, 'Борис', 'Семён'

Можно ли как то отсортировать записи по значениям `name` и `name2`по возрастанию так как будто это одно значение - чтоб получить.

id,name,name2
2, 'Пётр', 'Алексей'
4, 'Борис', 'Семён'
1, 'Владимир', 'Роман'
3, 'Степан', 'Дмитрий'

Первая строка "2, 'Пётр', 'Алексей'" исходя от имени Алексей значение name2
Вторая строка "4, 'Борис', 'Семён'" исходя от имени Борис значение name
Третья строка "1, 'Владимир', 'Роман'" исходя от имени Владимир значение name
Четвертая строка "3, 'Степан', 'Дмитрий'" исходя от имени Дмитрий значение name2

По двум значениям возможна сортировка - так как будто это одно значение? - то есть сортировка типа ORDER BY `name` ASC, `name2` ASC либо наоборот мне не подходит, она изначально сортирует по одному значению, потом по второму - мне же нужно как будто это одно значение.
brevis
select * from `names` order by if(`name` < `name2`, `name`, `name2`)

http://sqlfiddle.com/#!9/10acd0/2

_____________
Чатик в телеге
Helram
Цитата (brevis @ 4.06.2020 - 14:47)
select * from `names` order by if(`name` < `name2`, `name`, `name2`)

http://sqlfiddle.com/#!9/10acd0/2

Большое спасибо, а где подробнее можно об этом прочесть?
Helram
Цитата (brevis @ 4.06.2020 - 14:47)
select * from `names` order by if(`name` < `name2`, `name`, `name2`)

http://sqlfiddle.com/#!9/10acd0/2

Например значений будет 3, добавил третье - ошибка, что не так в условии?
select * from `names` order by IF(`name` < `name2` < `name3`, `name`, `name2`, `name3`);

http://sqlfiddle.com/#!9/7985f2/1
brevis
Оказывается есть функция LEAST(). Это сильно упрощает дело:
select * from `names` order by LEAST(`name`, `name2`, `name3`)

---

Прочесть об этом можно в документации, книгах... наверное можно даже на ютюбе посмотреть.

_____________
Чатик в телеге
Helram
Цитата (brevis @ 4.06.2020 - 15:20)
Оказывается есть функция LEAST(). Это сильно упрощает дело:
select * from `names` order by LEAST(`name`, `name2`, `name3`)

---

Прочесть об этом можно в документации, книгах... наверное можно даже на ютюбе посмотреть.

Подошло! большое спасибо, карме +
Valick
Цитата (Helram @ 4.06.2020 - 13:42)
Привет, у меня есть таблица с данными (id,name,name2)

Очень похоже, на "Неправильно ты Дядя Фёдор бутерброд ешь"

Helram, перед созданием таблиц БД ты правила нормализации выучил?


_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.