Как избежать вызова запросов к БД внутри циклов для дочерних данных

Я изо всех сил пытался выяснить, что является лучшим и наиболее эффективным способом обработки отображения дочерних данных. В моем конкретном случае я использую PHP и MySQL, но я чувствую, что это больше похоже на сделку «вообще на любом языке».

Мои две мысли (для этого примера я буду перечислять счета и их позиции)

  1. Соединение дочерних данных (элементов счетов-фактур) с основными данными (счетами-фактурами) с целью получения только одного запроса. Моя проблема заключается в том, что, скажем, в счете-фактуре 500 позиций (вероятно, нереально, но все происходит), затем я Я бы отправил 500-кратную общую сумму данных счета-фактуры с сервера MySQL на мой PHP-скрипт, и это звучит просто смешно, поскольку мне это нужно только один раз.

  2. И второй вариант заключается в том, чтобы при циклическом просмотре счетов-фактур и отображении общих данных счетов-фактур выбирать позиции счетов-фактур. И это, конечно, теперь связывается с базой данных еще 500 раз.

Есть ли другие варианты для работы с этими данными, которые имеют логический смысл (с данной схемой)? Я почти на 100% уверен, что есть, так как не могу поверить, что я первый, кто задумался над этой проблемой, но я думаю, что мне просто трудно найти правильный способ поиска дополнительной информации по этой теме. ,

0

Решение

Объединение дочерних данных (элементов счета-фактуры) с основными данными (счетами-фактурами), чтобы иметь только один запрос

Это обычный способ справиться с этим требованием. Он действительно обрабатывает избыточные данные, и есть некоторые накладные расходы.

Но.

  1. По этой причине можно указать сжатое соединение с RDBMS от клиента … Сжатие уменьшает нагрузку на сеть избыточных данных.
  2. избыточные данные в одном наборе результатов стоят намного меньше, чем повторные запросы.

Большинство людей просто получают избыточные данные в таком приложении. Программные продукты, такие как Crystal Reports, делают это.

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

   SELECT master_id, name, address, whatever
FROM master m
WHERE m.whatever = whatever
ORDER BY whatever

Затем поместите их в ассоциативный массив master_id,

Затем получите подробные записи.

  SELECT d.master_id, d.detail_id, d.item, d.unit, d.quantity
FROM detail d
JOIN master m ON d.master_id = m.master_id
WHERE m.whatever = whatever
ORDER BY d.master_id, d.detail_id, whatever

Вы получите набор результатов со всеми соответствующими подробными записями (элементами счета-фактуры), помеченными master_id значение. Вы можете сопоставить их в вашей программе php с основными записями. Вы в основном делаете соединение в своем коде приложения.

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]