Вопрос шаблона PHP / DB

0

У меня есть приложение, которое работает с идеей "кодов выкупа" (схема: 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?

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

  • 0
    Подожди секунду. Вы только что сказали, что у вас есть этот код в представлении ?
  • 0
    Будьте уверены, что это на самом деле сокращенная версия моей модели и представления. Я использую CodeIgniter, и все довольно хорошо разделено. Спасибо за беспокойство, и я был бы обеспокоен, если бы все это было в «представлении».
Показать ещё 1 комментарий
Теги:
architecture
design-patterns

2 ответа

0
Лучший ответ

Я прав, чтобы избежать хранения генерируемых данных, таких как # из оставшихся?

Да, вы правильно не храните вычисленные значения.
Логика вычислений может измениться, и работа с сохраненным вычисленным значением для обратной инженерии может быть кошмаром - если это возможно вообще в некоторых случаях.

Похоже, вы хотите объединить два запроса:

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
0

Когда вы запускаете свой запрос, чтобы получить коды для страницы, добавьте подзапрос, чтобы получить количество используемых кодов из таблицы 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 как внешний ключ, а не код.

Это все предполагается, что я правильно читаю вашу проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню