Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / MySQL Новый топик    Ответить
 Как сделать сортировку по алфавиту по части строки  [new]
Pavel Myakotin
Member

Откуда:
Сообщений: 3
Возник вопрос, с которым сижу уже достаточно долго. Задача - вывести отсортированные по алфавиту уникальные ячейки, но сортировка должна быть после определёного символа. Например

Вася / Москва
Петя / Ростов
Коля / Новгород

Разделитель - слеш-пробел, нужна сортировка по городу и только через Distinct т.к. данные могут повторяться при последующем выводе в выпадающий список <option>

SELECT distinct `name` FROM `profile`
ORDER BY SUBSTRING_INDEX('name', '/ ', -1) ASC

выводит всё, что слева, а нужно справа от разделителя и по этому и сортировать.
Есть ли какие-то варианты решения проблемы ?
Спасибо
28 окт 20, 10:14    [22221950]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать сортировку по алфавиту по части строки  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
DISTINCT - это неявный GROUP BY. Соответственно использование негруппированного значения в ORDER BY нелегитимно.

Pavel Myakotin
Задача - вывести отсортированные по алфавиту уникальные ячейки, но сортировка должна быть после определёного символа. Например

Вася / Москва
Петя / Ростов
Коля / Новгород

Вот и показывайте ЗАДАЧУ.

Структуру таблицы в виде CREATE TABLE (в теге SRC), пример данных в виде INSERT INTO (в теге SRC), и требуемый результат как таблицу (в теге Table, разделитель - запятая). Правильность форматирования проверяйте про кнопке Просмотр.

Pavel Myakotin
данные могут повторяться при последующем выводе в выпадающий список <option>

Наличие таких повторений в примере данных - обязательно.

Сообщение было отредактировано: 28 окт 20, 11:25
28 окт 20, 11:29    [22222046]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать сортировку по алфавиту по части строки  [new]
Pavel Myakotin
Member

Откуда:
Сообщений: 3
Спасибо за ответ. Если честно, я не совсем понял, что Вы имеете ввиду, не настолько хорошо знаю MySQL

Сама задача такова
Ячейки -
Вася / Москва
Ира / Москва
Петя / Ростов
Коля / Новгород
Антон / Орёл

В результате должно быть
Москва
Новгород
Орёл
Ростов

То есть запрос дожен брать из строки правую часть после определённого символа и, не допуская повторений, отсортировать результат по алфавиту.

Вот часть кода с запросом, который всё это делает, но т.к. SUBSTRING_INDEX берёт из строки то, что слева от символа-разделителя, естественно, не работает

<option value=''>Выберите город</option>";
$query = "SELECT distinct `name` FROM `mybase` ORDER BY SUBSTRING_INDEX('name', '/ ', -1) ASC";
$query_result = mysqli_query($sql,$query);
while($rows = mysqli_fetch_array($query_result))
{ // и так далее, тут при выводе не должно быть повторов городов

Столбец name содержит данные вида Имя (произвольное кол-во символов)|слеш-пробел|Город (произвольное кол-во символов)
Единственное, о чём я прошу - это подсказать, каким образом составить запрос чтобы при запросе отделялась часть после слеш-пробел и была сортировка по алфавиту этой части при выводе без повторений одинаковых полей (если не distinct, то, может, where count ?)

Спасибо
28 окт 20, 11:56    [22222072]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать сортировку по алфавиту по части строки  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20785
SELECT DISTINCT TRIM(SUBSTRING_INDEX(name, '/', -1)) AS name
FROM mybase
ORDER BY name;
fiddle
28 окт 20, 12:43    [22222119]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать сортировку по алфавиту по части строки  [new]
Pavel Myakotin
Member

Откуда:
Сообщений: 3
Огромное Вам спасибо !
28 окт 20, 12:46    [22222121]     Ответить | Цитировать Сообщить модератору
Все форумы / MySQL Ответить