Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Сортировка по цене с учётом валюты

Сообщения:  [1-10]    [11-20]  [21-23] 

 
 автор: Trianon   (16.07.2009 в 02:32)   письмо автору
 
   для: web777   (16.07.2009 в 02:23)
 

DECIMAL(всего_цифр, цифр_после_точки)
32.05 - DECIMAL(4, 2)
На первый вопрос отвечать не буду.
Вы мешаете в кучу инструмент SQL и логику обработки данных.
Если Вам непонятна функция COALESCE() - лучше внесите все возможные курсы в таблицу.
Хотя смысл её очень прост. Она вернет значение первого же (слева направо) определенного аргумента.

  Ответить  
 
 автор: web777   (16.07.2009 в 02:23)   письмо автору
 
   для: Trianon   (16.07.2009 в 01:56)
 

во, здорово, теперь вроде всё нормально работает, спасибо:)

по поводу COALESCE(c.coeff, 1) я так понял цифра 1 должна быть всегда или в зависимости от просматриваемой валюты подставлять соответствующий курс, ну то есть если просматриваем по доллару то в место 1 подставляем курс доллара 32.05 и если просматриваем по евро то курс евро 44.99 Или же тут всегда только 1 должна стоять?

да и какое значение указать для типа поля price decimal(0,0) сколько цифр оставить перед запятой и после? для коэффициента(coeff ) поставил так decimal(3,2) хотел decimal(2,2) но почему-то 2 заменилось автоматом на 3

  Ответить  
 
 автор: Trianon   (16.07.2009 в 01:56)   письмо автору
 
   для: web777   (16.07.2009 в 01:20)
 

Костыль: поменяйте слово where на слово having

[horisontal scrolling ЛАП on]

  Ответить  
 
 автор: web777   (16.07.2009 в 01:20)   письмо автору
 
   для: Trianon   (16.07.2009 в 00:21)
 

спасибо что помогаете, самому мне сложно разобраться

я попытался сделать по последнему примеру, получилось вот что

этот запрос работает нормально
SELECT a.*,(a.price * COALESCE(c.coeff, 1) ) AS price_new FROM `auto` a LEFT JOIN `currency` c ON a.currency=c.id ORDER BY price_new asc 


но если добавить where price_new BETWEEN 300 AND 50000
SELECT a.*,(a.price * COALESCE(c.coeff, 1) ) AS price_new FROM `auto` a LEFT JOIN `currency` c ON a.currency=c.id where price_new BETWEEN 300 AND 50000 ORDER BY price_new asc 


выдаётся такая ошибка:
Unknown column 'price_new' in 'where clause'

может я где-то не так что-то указал?

  Ответить  
 
 автор: Trianon   (16.07.2009 в 00:21)   письмо автору
 
   для: web777   (15.07.2009 в 22:36)
 

>спасибо за подсказку, верно, я не обратил внимание что нужно было у коэфициента заменить запятую на точку, а какой лучше тип указать для этого поля(коэфициент)?
DECIMAL
аналогично и с полем price
>
>насчёт 16 тыс. верно, в дампе этой цифры нет, она была вычислена PHP по курсу.
Вы сказали, что выполняете фильтр с помощью WHERE BETWEEN AND
Там у Вас совсем даже не вычисляемые поля, а исходные.
Сервер отрабатывает в строгом соответствии с текстом запроса.
подсказка:
SELECT а.* , (цена * COALESCE(курс, 1) ) AS result
...
WHERE result BETWEEN ... AND ...
ORDER BY result

  Ответить  
 
 автор: web777   (15.07.2009 в 22:36)   письмо автору
 
   для: Trianon   (15.07.2009 в 22:12)
 

спасибо за подсказку, верно, я не обратил внимание что нужно было у коэфициента заменить запятую на точку, а какой лучше тип указать для этого поля(коэфициент)?

насчёт 16 тыс. верно, в дампе этой цифры нет, она была вычислена PHP по курсу.

  Ответить  
 
 автор: Trianon   (15.07.2009 в 22:12)   письмо автору
 
   для: web777   (15.07.2009 в 20:03)
 

1. записи 16 тыс. евро я в дампе не нашел . поэтому подтвердить или опровергнуть утверждение не могу.
2. коэффициент курса валюты в таблице лежит в неправильно м формате и поле неправильного типа. Из-за чего от курса используется лишь его целая часть (без дробной) . Такую ошибку Вы будете искать годами, потому что проявляется она в мелочах.
3. задачу решить безусловно можно.

  Ответить  
 
 автор: web777   (15.07.2009 в 20:03)   письмо автору
4.1 Кб
 
   для: Trianon   (15.07.2009 в 18:20)
 

извиняюсь, сейчас сделал экспорт двух таблиц auto и currency и приложил файлом

но решить данную задачу както можно?
к примеру на странице
http://cars.auto.ru/cars/used/honda/accord/

можно заметить просмотр по различным валютам так же там присутствует два поля для выбора поиска по диапазону цены "Цена от" и "Цена до"

  Ответить  
 
 автор: Trianon   (15.07.2009 в 18:20)   письмо автору
 
   для: web777   (15.07.2009 в 17:37)
 

Это не дамп. Это некий отчет.
Дамп - это последовательность из операторов CREATE TABLE и INSERT
Снимается phpMyAdmin в разделе Экспорт

А отчет этот из поста уберите . Ленту рвет.

  Ответить  
 
 автор: web777   (15.07.2009 в 17:37)   письмо автору
 
   для: Trianon   (15.07.2009 в 17:14)
 

дамп немного урезал, убрал лишние колонки, оставил несколько

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-23] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования