Я уверен, что это уже обсуждалось много раз, но по какой-то причине я ничего не нашел (не может быть кофе).
В качестве вопроса дизайна вот идея.
Одна (удаленная) база данных выглядит примерно так
id|timestamp|log_entry|task_id
Они выбираются на портал PHP / Codeigniter и сопоставляются с локальной базой данных.
task_id|name|...
Теперь, анализируя удаленные данные, мне нужно (среди прочего) получить имя, связанное с каждой строкой. Простым способом было бы перебрать результат и в каждой итерации выполнить поиск (id -> name). Но это вызовет много вызовов БД. Другой способ, которым я вижу, - это предварительно выбрать все пары id-name в массив, а затем использовать это для поиска.
Для этого конкретного проекта я не ожидаю, что производительность будет проблемой в любом случае. Но какой самый эффективный способ сделать это?
РЕДАКТИРОВАТЬ: псевдокод
<?php
// ---------- Multiple queries example ------
$log_result = mysql_query('SELECT id, task_id, log_entry, timestamp FROM remote_db WHERE date=X');
foreach ($log_result as $log_row)
{
// Get task name for row
$task_name = mysql_query("SELECT name FROM local_db WHERE id={$log_row['task_id']}");
// Process this row ...
echo "Proccesed {$task_name} which occured at {$log_row['timestamp']}";
}
// ---------- Array example -----------------
$task_lookup = mysql_query('SELECT id, name FROM local_db');
$log_result = mysql_query('SELECT id, task_id, log_entry, timestamp FROM remote_db WHERE date=X');
foreach ($log_result as $log_row)
{
// Get task name for row
// assume task_lookup[] = array(id => name)
$task_name = $task_lookup[$log_row['task_id']];
// Process this row ...
echo "Proccesed {$task_name} which occured at {$log_row['timestamp']}";
}
?>