powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сделать сортировку по алфавиту по части строки
5 сообщений из 5, страница 1 из 1
Как сделать сортировку по алфавиту по части строки
    #40012490
Pavel Myakotin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возник вопрос, с которым сижу уже достаточно долго. Задача - вывести отсортированные по алфавиту уникальные ячейки, но сортировка должна быть после определёного символа. Например

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

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

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

выводит всё, что слева, а нужно справа от разделителя и по этому и сортировать.
Есть ли какие-то варианты решения проблемы ?
Спасибо
...
Рейтинг: 0 / 0
Как сделать сортировку по алфавиту по части строки
    #40012539
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DISTINCT - это неявный GROUP BY. Соответственно использование негруппированного значения в ORDER BY нелегитимно.

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

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

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

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

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

Наличие таких повторений в примере данных - обязательно.
...
Рейтинг: 0 / 0
Как сделать сортировку по алфавиту по части строки
    #40012552
Pavel Myakotin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ. Если честно, я не совсем понял, что Вы имеете ввиду, не настолько хорошо знаю 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 ?)

Спасибо
...
Рейтинг: 0 / 0
Как сделать сортировку по алфавиту по части строки
    #40012568
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
SELECT DISTINCT TRIM(SUBSTRING_INDEX(name, '/', -1)) AS name
FROM mybase
ORDER BY name;

fiddle
...
Рейтинг: 0 / 0
Как сделать сортировку по алфавиту по части строки
    #40012569
Pavel Myakotin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное Вам спасибо !
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как сделать сортировку по алфавиту по части строки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]