|
|
|
| Товарищи, прошу совета, два вопроса.
Как лучше/правильнее:
А) Выдавать из БД стоимость товара в исходной валюте или сразу конвертировать (по курсу из
другой таблицы) в готовое к выводу на экран значение? Понятно, что если выдавать в исходно виде, то нужен доп. пхп код, которые доведёт цифру до нужного формата. Так что же выбрать?
Б) Суть в том, что стоимость товаров в БД задаётся в разной валюте, выводится она может пользователем так же в валюте по желанию, система пересчитывает стоимость по курсам валют. Тут и возникает проблема. По уму, курсы все надо хранить в одном месте и считать одним алгоритмом. А ситуация требует удобств, например, для некоторых товаров курс надо указывать как 1 рубль = 13 тугриков, а для других, напрмер, в долларах, в привычном виде: 1 доллар = 35 рублей.
То есть, рушится основа, относительно которой колебаются валюты. Как тут быть? | |
|
|
|
|
|
|
|
для: Zilog
(25.07.2014 в 00:38)
| | Здравствуйте. По пунктам:
А) Если в техническом задании чётко не указано как выводить, то наиболее приемлемый вариант конвертировать сразу. Если пользователя не устроит автоматическая конвертация, то потом пусть выберет сам в какую перевести.
Б) Создаете таблицу с курсами валют со следующими столбцами: id, название валюты, курс(относительно какой-либо валюты).В таблице товаров указываете id валюты, в которой указана цена. При этом, если цена указывается в валюте, к курсу которой вы привели остальные, то в товарной таблице id валюты будет равен нулю. И при выводе цены алгоритм следующий: выбор записей из таблицы товаров с левым объединением с таблицой курса валют. Если идёт переконвертирование, то так:
1. Выбираем товарные записи.
2. По id валют (2 шт: первый получен из товарной таблицы, второй - указан пользователем) получаем их курсы в эталонной валюте.
3. Вычисляем цены.
4. Выводим пользователю.
P.S.: при такой системе указания цен смиритесь с написанием ещё единой функции-конвертатора валют. Да и основа никакая не рушится. Просто приведите валюты, так сказать, к общему знаменателю. :) | |
|
|
|
|
|
|
|
для: Rolex
(25.07.2014 в 01:45)
| | Путаница выходит. Ладно, если потом самому пользоваться, но как бабам объяснить всю логику и заставить помнить когда надо указывать для товара валюту, а когда нет. Не говоря про то, что сегодня бабы одни, завтра другие.
В этой связи, необходимым условием должно быть обязательное указание исходной валюты для товара, и внешней. Вся логика должна быть скрытой от юзера, ибо бардак будет потом. | |
|
|
|
|
|
|
|
для: Zilog
(25.07.2014 в 16:08)
| | Не выдумывайте сложностей для себя! В форме внесения товара делаете текстовую форму с надписью цена, а рядом выпадающий список валют. Так что если кто-то из них неправильно вносит, то это уже их проблемы. В выпадающем списке разместите валюты по статистике использования, начиная с самой частой. Т.е. валюту указывать всегда. Упростить задачу можно, допустим, указав значение по-умолчанию, например, российский рубль. | |
|
|
|
|
|
|
|
для: Rolex
(25.07.2014 в 17:16)
| | Согласен, перемудрил. Писал ответ на скорую руку, и только сейчас разобрал что было написано выше. Вы предлагаете привести валюту к общему знаменателю, тогда если 1 рубль = 15 тугрикам, то тот же 1 рубль должен быть = 0,0285 долларов.
Но тут и всплывает проблема: мы привыкли к форме 1 доллар = 35 рублей (что и хотелось бы каким-то образом совместить). И общего знаменателя, увы, тут не выходит. | |
|
|
|
|
|
|
|
для: Zilog
(25.07.2014 в 21:48)
| | Тогда можно асинхронно переводить (для администратора) с помощью, например, AJAX'a. А суть остаётся то той же: прямая и обратная конвертация :) можно обойтись и без асинхронизма. Но функция конвертации должна присутствовать. | |
|
|
|
|
|
|
|
для: Zilog
(25.07.2014 в 00:38)
| | 1. В БД хранить цены в одной валюте - не важно в какой
2. Создать табличку курсов валют, которую с приемлимой периодичностью обновлять с достоверных источников.
3. Написать одну функцию конвертации из любой валюты в любую другую на основе курсов из пункта 2
function foo($sum, $from, $to) {}
|
4. Перед записью в БД конвертировать стоимость в единую валюту. Перед выводом - конвертировать из единой валюты в нужную
PS по-сути советы те же, что озвучил Rolex | |
|
|
|