Как лучше всего ссылаться и называть информацию в именной БД

У меня есть два дБ. Один содержит все созданные временные коды с эксклюзивным идентификатором # (code_id) к временному коду. это выглядит так:

----------------------------------------------
|                  time_codes                |
----------------------------------------------
|code_id | dept_id | code_number | code name |
----------------------------------------------
|   10   |    9    |    13       | Excavation|
|   11   |    9    |     4       | Concrete  |
|   12   |   11    |    73       | Masonry   |
----------------------------------------------

Затем я ввел записи табеля учета рабочего времени, где сотрудник записывал свое время для каждого задания на день. Это выглядит так:

---------------------------------------------------------------
|                            time_log                         |
---------------------------------------------------------------
| id | date | job_number | department_id | code_id | log_time |
---------------------------------------------------------------
| 59 | y-m-d| xx-xx-xxxx |       9       |    13   |    3.25  |
| 64 | y-m-d| xx-xx-xxxx |      11       |    73   |    6.00  |
---------------------------------------------------------------

Я хочу сослаться на code_number,code_name при отзыве записей на записанные time_log, Я хочу знать, как лучше всего ссылаться на них эффективно, не облагая налогом сервер.

Я думал о двух методах;
1. В цикле while (), который тянет каждый time_log запись, которую я мог бы сделать mysqli_query, чтобы посмотреть вверх code_id а затем возьмите имя и распечатайте его в указанном месте.
который будет выглядеть примерно так:

$hours_qry = mysqli_query($con,"SELECT `date`,`job_number`,`code_id`,`log_time` FROM `time_log` WHERE `date` BETWEEN STR_TO_DATE('$from_date', '%Y-%m-%d') AND STR_TO_DATE('$to_date', '%Y-%m-%d') ORDER BY `date` ASC, `job_number` DESC,`code_id` ASC");
// get records within work week
while($result = mysqli_fetch_array($hours_qry)){
$Cdate = $result['date'];
$Cjob_number = $result['job_number'];
$Ccode_id = $result['code_id'];
$Clog_time = $result['log_time'];

// get code name and number for display
$code_qry = mysqli_query($con,"SELECT `code_number`,`code_name` from `time_codes` WHERE `code_id` = $Ccode_id");
while($code_results = mysqli_fetch_array($code_qry)){
$code_number = $code_results['code_number'];
$code_name = $code_results['code_name'];
}

}

Однако я думаю, что это будет создавать ненужные запросы запросов снова и снова каждый раз, когда цикл обрабатывает запись.

Тогда я подумал, что, может быть, смогу (но я не знаю как);
2. Сделай это time_codes запрос вызова до time_log цикл while () и создайте массив time_codes, затем в цикле while () я мог бы как-то ссылаться на массив и вытащить code_number, code_name это соответствует code_id,

Что лучше, или оба они уступают более распространенному методу?

0

Решение

Происходит быстрее, если вы выполняете JOIN в БД одним запросом, а не извлекаете его за 2 шага:

$query = mysqli_query($con,"SELECT date, job_number, tl.code_id, log_time, code_number, code_name FROM time_codes tc JOIN time_log tl ON tc.code_id = tl.code_id WHERE date BETWEEN STR_TO_DATE('$from_date', '%Y-%m-%d') AND STR_TO_DATE('$to_date', '%Y-%m-%d') ORDER BY date ASC, job_number DESC,tl.code_id ASC");

while($result = mysqli_fetch_array($query)) {
$Cdate = $result['date'];
$Cjob_number = $result['job_number'];
$Ccode_id = $result['code_id'];
$Clog_time = $result['log_time'];
$code_number = $result['code_number'];
$code_name = $result['code_name'];
}
1

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

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