У меня есть приложение, которое работает с идеей "кодов выкупа" (схема: ID, NAME, USES, CODE
). И пример будет "32, Stack Overflow, 75, 75%67-15hyh"
Таким образом, этот код предоставляется сообществу SO, допустим, и имеет 75 выкупов. Вы выкупите его, введя информацию о доставке и код. При вводе эта проверка выполняется заранее:
if (code exists){
if (count_entries_where_code=$code < $uses_set_at_creation){
//enter information into DB for processing
{
//echo "sorry, not a real code"
}
Таким образом, количество общего использования жестко запрограммировано, но текущие # исправлений генерируются с помощью SQL-запроса (count_results from entry_data WHERE code=$code
). Эта часть работает нормально, но вот вопрос:
На странице view, где я управляю кодами, у меня есть базовая настройка (в псевдо PHP с реальным кодом, разделенным на установку MVC):
$results = "SELECT * FROM codes";
foreach ($result as $code){
echo $code->code;
echo $code->name;
//etc. It actually all in a nice HTML table.
}
Итак, я хочу, чтобы в столбце перечислялось "количество использований, оставшихся в коде". Должно ли что-то подобное быть сохранено в БД и вытащено таким образом? Было бы проще сгенерировать с помощью цикла foreach
, но я обычно не предпочитаю хранить "сгенерированную" статистику. Есть ли умный способ получить эти результаты на правильные строки таблицы, созданные с помощью цикла foreach?
(Я в порядке с кодом, поэтому мне не нужен рабочий/отличный синтаксический пример, просто объяснение шаблона, который может соответствовать этой проблеме, и, возможно, обсуждение общей схемы для чего-то вроде этого. чтобы избежать хранения генерируемых данных, например, количество использованных левых? и т.д.)
Я прав, чтобы избежать хранения генерируемых данных, таких как # из оставшихся?
Да, вы правильно не храните вычисленные значения.
Логика вычислений может измениться, и работа с сохраненным вычисленным значением для обратной инженерии может быть кошмаром - если это возможно вообще в некоторых случаях.
Похоже, вы хотите объединить два запроса:
SELECT c.id,
c.name,
c.uses,
c.code,
x.num_used
FROM CODES c
JOIN (SELECT ed.code,
COUNT(*) 'num_used'
FROM ENTRY_DATA ed
GROUP BY ed.code) x ON x.code = c.code
Когда вы запускаете свой запрос, чтобы получить коды для страницы, добавьте подзапрос, чтобы получить количество используемых кодов из таблицы entry_data.
select codes.id, codes.name, codes.uses, codes.code (select count(code) from entry_data where entry_data.code=codes.code ) as used_codes
Id использует code_id как внешний ключ, а не код.
Это все предполагается, что я правильно читаю вашу проблему.