Мне нужно извлечь несколько строк из таблицы и обработать их двумя способами:
- агрегировано по ключу
- строка за строкой, отсортированная по тому же ключу
Таблица выглядит примерно так:
table (
key,
string_data,
numeric_data
)
Итак, я смотрю на два подхода к функции, которую я пишу.
Первый извлекает агрегированные данные одним запросом, а затем снова запрашивает внутри цикла для каждого набора построчных данных (следующий псевдокод похож на PHP):
$rows = query(
"SELECT key,SUM(numeric_data)
FROM table
GROUP BY key"
);
foreach ($rows as $row) {
<process aggregate data in $row>
$key = $row['key'];
$row_by_row_data = handle_individual_rows($key);
}
function handle_individual_rows($key)
{
$rows = query(
"SELECT string_data
FROM table WHERE key=?",
$key
);
<process $rows one row at a time>
return $processed_data;
}
Или я мог бы сделать один большой запрос и позволить коду выполнить всю работу:
$rows = query(
"SELECT key, string_data, numeric_data
FROM table"
);
foreach ($rows as $row) {
<process rows individually and calculate aggregates as I go>
}
Производительность не является практической проблемой в этом приложении; Я просто хочу написать разумный и понятный код.
Мне нравится первый вариант, потому что он более модульный, и мне нравится второй вариант, потому что он кажется структурно простым. Один вариант лучше другого или это просто вопрос стиля?