MYSQL сортировка таблицы

12
B
На сайте с 23.10.2006
Offline
170
979

Потребовалось отсортировать таблицу в базе, делаю


ALTER TABLE `tovar` ORDER BY `filter_3`

Все было бы супер, но filter_3 - это varchar и сортировка получается

118

119

10

11

12

201

202

Как сделать аналог выборки?

SELECT * FROM `tovar`ORDER BY `filter_3`+0

Тоесть отсортировать таблицу по полю varchar, но при сортировке данные воспринимать как int?

будут мысли?

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#1

Если только загружать данные в массив PHP, а потом там уже сортировать.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
B
На сайте с 23.10.2006
Offline
170
#2
LEOnidUKG:
Если только загружать данные в массив PHP, а потом там уже сортировать.

Это конечно как вариант, но хотелось бы силами базы.

LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#3
bimcom:
Это конечно как вариант, но хотелось бы силами базы.

Ну измените vaкchar на int в чём проблема? :)

A
На сайте с 18.10.2007
Offline
125
#4

что-то подобное


ALTER TABLE tovar ORDER BY cast(filter_3 as signed integer)
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
B
На сайте с 23.10.2006
Offline
170
#5
LEOnidUKG:
Ну измените vaкchar на int в чём проблема? :)

там есть после числового куска другие символы, которые в силу архитектуры в другое поле так просто не выкинуть - уж лучше тогда всю таблицу прочитать и отсортировать силами PHP.

Но хочется силами базы.

alarm:
что-то подобное

ALTER TABLE tovar ORDER BY cast(filter_3 as signed integer)

Ругается на cast

A
На сайте с 18.10.2007
Offline
125
#6

Да, почитал документацию, не работает alter table с cast, насколько я понял

Only column names are permitted as sort criteria; arbitrary expressions are not permitted
LEOnidUKG
На сайте с 25.11.2006
Offline
1762
#7

bimcom, понимаете БД, для хранения информации. Она не для вычитания, сортировки, умножения и т.п. Это все доп.функции у неё, но не основные, поэтому они будут очень сильно тормозить. Да и нету многих функций вообще физически.

A
На сайте с 18.10.2007
Offline
125
#8
LEOnidUKG:
bimcom, понимаете БД, для хранения информации. Она не для вычитания, сортировки, умножения и т.п. Это все доп.функции у неё, но не основные, поэтому они будут очень сильно тормозить. Да и нету многих функций вообще физически.

База данных - она не "для" - она и есть набор структурированной информации.

SQL - язык как раз для всего того, о чем вы написали.

A
На сайте с 19.07.2010
Offline
130
#9
bimcom:
Как сделать аналог выборки?
SELECT * FROM `tovar`ORDER BY `filter_3`+0

сортировка в Вашем примере - работает нормально, сортирует как числа.

если вопрос: "сделать выборку", то так:

SELECT *  FROM tovar where cast(filter_3 as signed integer) > 20 order by filter_3 +0
или
SELECT * FROM tovar where filter_3 +0 > 20 order by filter_3 +0

у меня отработали нормально оба варианта.

Upd: увидел, Вы мучаете alter table...

.............
IL
На сайте с 20.04.2007
Offline
435
#10
bimcom:
Потребовалось отсортировать таблицу в базе, делаю
ALTER TABLE `tovar` ORDER BY `filter_3`

???

Для упорядочивания данных определённым способом используйте поле (несколько)

ALTER изменяет структуру таблицы.

Если нужно, чтобы записи без сортировки (без ORDER) выдавались в определённом порядке - может сработать способ записать их в нужном порядке (т.е. INSERT INTO ... SELECT ...), однако никаких "гарантий" - при любом удалении следующие строки будут добавляться в "свободные" места.

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий