сортировка VARCHAR как INT

Alx

Новичок
сортировка VARCHAR как INT

Приветствую!

Подскажите, плз, путь решения следующей задачи:

в БД хранятся записи типа 256 Mb, 512 Mb и 1 Gb. Как правильно отсортировать значения этой колонки? Как быть с "1 Gb"? Может как-то возможно во время SELECT дать понять что

256 Mb (varchar) = 256 (int)
512 Mb (varchar) = 512 (int)
1 Gb (varchar) = 1024 (int) ?
 

vadim

Guest
Alx
А нельзя выбрать одну систему отсчёта, например всё хранить в Mb?
 

[Gisma]

Новичок
а уж написать php-функцию конверта 1024 MB == 1 GB проще простого
 

Alx

Новичок
дело в том, что аплоад в эту бд идёт из тех данных которые уже есть у заказчика. А там всё хранится именно так. Поэтому выбрать один формат (Mb) нельзя.

Но что если сделать формат этого поля INT. Тогда все эти Mb и Gb вылетят из таблицы и останутся только записи типа 256, 512 и 1. Можно ли как-то ни выборке из бд сказать что "1 - это 1024"?
 

voituk

прозревший
Alx
переконвертируй данные что есть, и храни все в одних единицах измерения.
 

Alx

Новичок
voituk
я понимаю, что это было бы самым простым решение, но дело в том, что данные закачиваю в бд не я, а заказчик сайта. У него есть своя локальная бд, в которой хранятся данные по всем товарам. Вот я и ищу варианты, чтобы избежать просьб типа: "Пробегитесь по всем своим нескольким стам записей и приведите всё к одному формату". Хотя может их там и не так много, но всё же, если есть какое альтернативное решение, то было бы оч хорошо. Вот таки дела :)
 

Mich

Продвинутый новичёк
Ты предлагаешь, чтобы БД сама
Пробегитесь по всем своим нескольким стам записей и приведите всё к одному формату
при каждом запросе вместо того чтобы сделать это один раз?
 

voituk

прозревший
Mich
Появится возможность определить собственный механизм сравнения и использовать
http://php.paco.net/manual/en/function.usort.php

Как вариант можно ещё использовать User Defined Functions в MySQL - но судя по всему тут такой вариант не проходит.
 

Mich

Продвинутый новичёк
Ну так все равно придется переводить к одной единице измерения. Как ты отсортируешь:
1 B
1 KB
1 MB
1 GB
?
 

Andreika

"PHP for nubies" reader
[sql]SELECT size,CONVERT(size,SIGNED)*POW(1024,FIELD(SUBSTRING_INDEX(size,' ',-1),'b','kb','mb','gb')) as K FROM `t3` WHERE 1 ORDER BY k[/sql]
 

voituk

прозревший
Mich
Это такой новый способ флуда?
Или ты не в состоянии сравнить 1Gb и 5Mb ?

Andreika
/me снимает шляпу!
 
Сверху