Преобразование между разными единицами измерения в SQL (в Access)

Я пытаюсь запрограммировать базу данных доступа, но использую SQL для всех своих запросов. У меня почти полная база данных, но у меня есть один запрос, который меня озадачил. Это база данных, содержащая рецепты. У меня есть таблица, в которой у меня есть все преобразования для приготовления пищи (столовая ложка в чайную ложку, чайную ложку в чашку и т. д.). Пользователь должен иметь возможность добавлять ингредиент, используя те единицы, которые требуются в рецепте (другими словами, я не могу стандартизировать единицы, я должен найти, какие они есть). Затем мне нужно преобразовать их в стандартизированную единицу. Вот где у меня проблема, потому что такие вещи, как овощи, могут поставляться в чашках, столовых ложках и т. д., Тогда как такие вещи, как мясо, входят в унции, фунты и т. д. Я не хочу создавать кучу vb if / then. Я чувствую, что должен быть способ сделать это с помощью SQL, но я не могу этого понять.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
4 504
6

Ответы 6

до тех пор, пока вы спрашиваете пользователя об используемом им устройстве и знаете, что собираетесь делать, у вас должна быть возможность просто запросить ответ из файла. Предположим, ваша таблица выглядит примерно так:

fromUnit fromUnitFactor (вероятно, всегда 1) ToUnit ToUnitFactor (все, что нужно для перехода от fromUnit к toUnit)

затем просто запросите это, вы знаете, что ищете, знаете, что у вас есть. Затем просто возьмите сумму, указанную пользователем, и умножьте ее на возвращаемый toUnitFactor.

Самая большая проблема в том, что вам нужна каждая комбинация from и to в вашей таблице.

имеет смысл?

Я думаю, что для приготовления нужно разделить два разных типа единиц.

  1. по весу
  2. по объему

Вы не можете стандартизировать эти единицы, или какой смысл знать, что вам нужно 2 чашки мяса?

Затем, когда вы дифференцируете эти два разных типа единиц, вы можете стандартизировать их две единицы в одну. Может быть:

  1. чашки, чайные ложки, ... в мл
  2. мясо, овощи, ... в граммах или фунтах, или что-то еще

Если все они имеют одинаковую базу, вы можете их сравнить.

Чтобы еще больше усложнить ситуацию, в рецептах существует соглашение об использовании разных физических величин для разных единиц. например 10 мл или 1 столовая ложка, 500 грамм или 1 фунт. - идея в том, что миллилитры и граммы будут иметь те же пропорции, что и столовая ложка. и фунты, если не в одинаковом количестве.

James Anderson 14.01.2009 18:19

На самом деле во многих случаях требуется преобразование веса и объема. Например, при разработке базы данных инвентаря / закупок / цен на продукты питания для ресторана, в котором я работаю, мне пришлось выяснить, как конвертировать между фунтами и чашками, потому что (например) мы покупаем петрушку и бобы фунтами, но измеряем их чашками в наших рецептах. Чтобы определить подходящие цены на нашу еду, нам нужно было определить, сколько фунтов петрушки / бобов в x чашках ... это означало, что фактически нужно взвесить установленный объем всех наших продуктов и ввести эти измерения в систему.

J. Taylor 02.08.2015 04:27

Я бы подумал об этом иначе. У вас есть разные типы мер (объем, вес, количество и т. д.). У каждой из этих мер есть разные конвертируемые единицы. Выбирая меру (например, унции), выберите и тип меры, и конкретную единицу. У меня был бы способ преобразования между единицами измерения одного и того же типа - для поддержки рецептов изменения размера - но я бы не стал беспокоиться о преобразовании между разными типами мер.

Узнав тип, вы можете сохранить все значения в базе данных в единицах базовой единицы для этого типа меры. В зависимости от значения и, возможно, предпочтений пользователя, вы можете преобразовать его в подходящий дисплей, когда вы его показываете. Я не думаю, что это было бы особенно легко сделать в SQL, и я бы не побоялся выполнить преобразование в коде. Вам просто нужно иметь другое средство форматирования дисплея для каждого типа меры, которое выбирает соответствующие единицы и выполняет преобразование.

Пользователь должен будет предоставить вам единицу измерения, и каждая единица будет иметь тип (вес, объем и т. д.). Ваша «таблица преобразования» просто должна будет включать базовый уровень для каждого типа единицы. то есть 8 унций на чашку, 128 унций на галлон. Зная эти две вещи, вы можете преобразовать чашки в галлоны.

Другое дело, сделать это в доступе в одном запросе. Если вы можете сделать немного VBA, получить от чашки к унциям за один вызов, а затем из унций в галлоны за другой, я думаю, вам будет намного легче.

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

Вы можете иметь в виду CROSS JOIN, например. ВЫБРАТЬ * ИЗ OneRowTable, TenRowTable; (Jet не поддерживает явно синтаксис CROSS JOIN) будет набор результатов из 10 строк, по одной для каждой строки в TenRowTable со значениями из одной строки в OneRowTable в каждой строке набора результатов. Это то, что тебе надо?

onedaywhen 16.01.2009 11:41

ХОРОШО,

Просто хотел опубликовать свое решение на случай, если у кого-то возникнет эта проблема в будущем. На самом деле я составляю таблицу и заполняю ее всеми другими данными, которые меня интересуют, с помощью SQL обычным способом. Затем у меня есть функция DCOUNT, чтобы узнать, сколько записей задает переменную. Затем у меня есть функция DLOOKUP, которая сообщает мне, из чего и что нужно преобразовать, и устанавливает это в новую таблицу для записи, в которой я участвую. Фух, я думаю, что я над головой! Спасибо за помощь, ребята.

Другие вопросы по теме