Регистрация
Вход через соцсети
Восстановление пароля

Выборка по цене, учитывая что цена указана в разной валюте

Новый топик
22.11.2013, 14:58
Ответить | Цитировать
Артем

Зарегистрирован:
2013-05-20
Сообщений: 23

Здравствуйте.

На странице реализована выборка, в том числе по цене. Основная валюта - RUR (рубли).
Но есть товары у которых цена указана в USD (доллар).
Вывод на страницу осуществляется в рублях.

Подскажите плз, можно ли настроить выборку так, чтобы учитывалась в какой валюте указана цена.

Т.е. если в выборке указан диапазон: от 1000 до 2000, то выводились и продукты имеющие
цену 50 USD
22.11.2013, 15:16
Ответить | Цитировать
Nexwich
Панасин Александр
Nexwich

Зарегистрирован:
2011-04-05
Сообщений: 943

У меня был заказ, магазин в долларах(цены выводились в рублях). В поиске вводились рубли. При поиске делил на курс в итоге выводил долларовые товары. Но у вас есть и рублевые товары так что вам нужно будет дополнительно передать параметр о долларах.

Вариант
Создать скрипт с запросом который будет переписывать цены в рубли. Добавить его в задачи крона на выполнение 1 раз в день или 2.
У вас два поля Price цена(не заполняется если цена в долларах) и usd_price доллары (То что вы вписываете) Скрипт посылает запрос в бд, находит товары с долларами, пересчитывает их в рубли по текущему курсу вписывая в поле Price пересчитанную цену.
В принципе это простейший запрос.
Для получения курса также можете использовать запрос в бд
$usd=$db->query("SELECT Rate FROM Message223 WHERE Currency=2 AND MAX(Message_ID)");
$db->query("UPDATE Message2005 SET Price='usd_price*$usd' WHERE usd_price");

Это лишь пример

Модуль "Почтовые уведомления" – настройка уведомлений на вашем сайте без программирования. Цена отзыв. Мне очень важно ваше мнение.
22.11.2013, 16:28
Ответить | Цитировать
Артем

Зарегистрирован:
2013-05-20
Сообщений: 23

Спасибо, попробую.
02.12.2013, 12:57
Ответить | Цитировать
Артем

Зарегистрирован:
2013-05-20
Сообщений: 23

Предыдущий вариант решил оставить на крайний случай.

Кто-нибудь знает как модернизировать sql-запрос:
Цитата:
SELECT SQL_CALC_FOUND_ROWS a.`Message_ID`, a.`User_ID`, a.`IP`, a.`UserAgent`, a.`LastUser_ID`, a.`LastIP`, a.`LastUserAgent`, a.`Priority`, a.`Parent_Message_ID`, a.`ncTitle`, a.`ncKeywords`, a.`ncDescription`, sub.`Subdivision_ID`, CONCAT( '', sub.`Hidden_URL`) as Hidden_URL, cc.`Sub_Class_ID`, cc.`EnglishName`, a.`Checked`, a.`Created`, a.`Keyword`, a.`LastUpdated` + 0 AS LastUpdated, a.Name, a.Vendor, a.ItemID, a.Price, tbl2571.ShopCurrency_Name AS Currency, tbl2571.ShopCurrency_ID AS Currency_id, tbl2571.`Value` AS Currency_value , a.PriceMinimum, tbl2573.ShopCurrency_Name AS CurrencyMinimum, tbl2573.ShopCurrency_ID AS CurrencyMinimum_id, tbl2573.`Value` AS CurrencyMinimum_value , a.Image, tbl2575.ShopUnits_Name AS Units, tbl2575.ShopUnits_ID AS Units_id, tbl2575.`Value` AS Units_value , a.StockUnits, a.ImportSourceID, a.TopSellingMultiplier, a.TopSellingAddition, a.VAT, a.AmountOfTraffic, a.FullName, a.TimeWork, a.CountLicenses, a.OperatingSystem, a.Capacity, a.Language, a.TypeLicenses, a.TypeOrganization, a.ID_1C, a.DeliveryType, a.Articul, a.DescriptionProd, a.DecipheringLicense, a.Model, a.VendorCartridges, a.ProductAvailability, a.TypeCartridges, a.ForPrinters, a.Refillable, a.Compatibility, a.USD_Price, a.Price AS Price, a.Currency AS Currency FROM (`Message2081` AS a ) LEFT JOIN `Subdivision` AS sub ON sub.`Subdivision_ID` = a.`Subdivision_ID` LEFT JOIN `Sub_Class` AS cc ON cc.`Sub_Class_ID` = a.`Sub_Class_ID` LEFT JOIN `Classificator_ShopCurrency` AS tbl2571 ON a.`Currency` = tbl2571.ShopCurrency_ID LEFT JOIN `Classificator_ShopCurrency` AS tbl2573 ON a.`CurrencyMinimum` = tbl2573.ShopCurrency_ID LEFT JOIN `Classificator_ShopUnits` AS tbl2575 ON a.`Units` = tbl2575.ShopUnits_ID WHERE 1 AND a.`Parent_Message_ID` = '0' AND sub.`Catalogue_ID` = '1' AND a.`Subdivision_ID` = '371' AND a.`Sub_Class_ID` = '571' AND a.`Checked` = 1 AND( (a.Price>=1000 AND a.Price<=2000)) ORDER BY Message_ID LIMIT 0, 15


Это запрос который выводит товары, а цветом выделена выборка по цене, которую я хотел бы заменить на:
Цитата:
( (a.Price * ( SELECT `Rate` FROM `Message223` WHERE `Currency`=a.`Currency` ORDER BY MAX(`Message_ID`) )>=1000 AND a.Price * ( SELECT `Rate` FROM `Message223` WHERE `Currency`=a.`Currency` ORDER BY MAX(`Message_ID`) )<=2000))


,используя системные переменные запросов: $query_where или др.;
или же альтернативно изменить запрос, но с тем же результатом, т.е. Price прежде чем сравниваться досжна умножиться на курс валюты.
198 196 2013-12-02 12:57:52 13400
Описание проекта