Страницы

Поиск по вопросам

среда, 8 мая 2019 г.

Как вставить запись в таблицу MySQL с учетом сортировки по алфавиту?

Есть некая картотека людей:

Суть картотеки состоит в том, чтобы хранить такие вот карточки, в каждой из которых записаны по три фамилии изначально. Каждая карточка пронумерована. Фамилии в карточках и картотеке в целом расположены в порядке сортировки по афавиту.
В MySQL таблица хранящая данную картотеку выглядит так:
id card_number (номер карточки) position (позиция фамилии в карточке) surname (фамилия)
Задача: добавить новую фамилию в картотеку с сохранением позиций фамилией, которые там уже есть, но в ближайшую по сортировке карточку.
К примеру, нам нужно добавить фамилию "Иващенко" Фамилия Иващенко по правилам сортировки должна быть после Иванов и перед Илитаев, но так как нам нельзя менять порядок уже существующих в карточке фамилий, то мы должны просто добавить её в конец карточки №1, после фамилии "Илитаев"
В итоге получается мне нужно каким-то образом для заданной фамилии (например для "Иващенко" №1) определить номер карточки в которую я собираюсь добавить эту фамилию.


Ответ

select * from card where surname=( select max(surname) from card where surname<'Иващенко' )
Даст ту же запись, которую дал бы приведенный вами PHP алгоритм. Если надо определять некие "расстояния" между фамилиями - что бы найти действительно "ближайшую", то вам и на PHP придется попотеть. Но это в принципе то же решаемо. Например вы можете аналогичным SQL запросом получить запись идущую после вставляемой и уже между ними двумя на php вычислять какая "ближе"
Если приведенный запрос не вернул ни одной записи, значит задали фамилию которая должна быть первой в картотеке. Т.е. такую запись надо точно добавлять в первую карточку картотеки.

Комментариев нет:

Отправить комментарий