Автор Тема: Упорядочивание записей...  (Прочитано 3493 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн wheelszeus

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 32
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Упорядочивание записей...
« : 25 Января 2005, 17:46:37 »
Здравствуйте уважаемые.
У меня есть таблица в MySQl:
create table price (
id int not null auto_increment,
add_date datetime,
name varchar(255) not null,
price_s varchar(25) not null,
primary key(id)
);
в столбце price_s вот такие значения 990005, 999005, 1000000.
Делаю запрос SELECT * FROM price ORDER BY price_s DESC;
Типа хочу упорядочить по столбцу price_s, но почему то получается так, что он сначало выводит 999005, а потом только 1000000, хотя последнее больше. Почему? Дело в запросе? Может как то иначе составить запрос? Или на пхп сделать какую нить функцию?
Заранее спасибо.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Упорядочивание записей...
« Ответ #1 : 25 Января 2005, 18:03:05 »
хранить надо данные в полях того типа, которые для них предназначены.
к пхп вопрос не имеет ни малейшего отношения.

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Упорядочивание записей...
« Ответ #2 : 25 Января 2005, 18:11:33 »
Цитировать
в столбце price_s вот такие значения 990005, 999005, 1000000.

все цены желательно хранить в типе данных int.

P.S. существуют так же типы данных ориентированные именно по цены аля:  (money, numeric(n, 2)) но эти типы надо использовать с осторожностью дабы небыло неточностей при сокращинии...
And no religion too...

Оффлайн Croaker

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 927
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alex-files.ru
Упорядочивание записей...
« Ответ #3 : 25 Января 2005, 18:15:03 »
wheelszeus

Дело в запросе. Поле price_s у тебя строковое, а ты хочешь, чтобы оно сортировалось как число.

Либо измени тип поля price_s на INTEGER (или DOUBLE, что правильней, т.к. цена может содержать десятичную и сотую части), либо пошарься по ману MySQL - там должна быть функция привидения типов (как зовется - не помню).
Не все коту матрица.

Оффлайн Croaker

  • Модератор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 927
  • +0/-0
  • 0
    • Просмотр профиля
    • http://alex-files.ru
Упорядочивание записей...
« Ответ #4 : 25 Января 2005, 18:16:10 »
Цитировать
commander:
существуют так же типы данных ориентированные именно по цены аля: money


в MySQL?
Не все коту матрица.

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Упорядочивание записей...
« Ответ #5 : 25 Января 2005, 18:21:35 »
Croaker
аля money ... :)
And no religion too...

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Упорядочивание записей...
« Ответ #6 : 25 Января 2005, 20:40:36 »
commander
float называется
AS IS...

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Упорядочивание записей...
« Ответ #7 : 25 Января 2005, 21:28:07 »
Судя по обсуждениям в сети, в mysql  использовать float не рекомендуется для хранения денежных сумм.
Цены хранят в копейках - то есть используется тип INT
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Упорядочивание записей...
« Ответ #8 : 25 Января 2005, 23:07:44 »
не int, а decimal

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28