У меня есть два дБ. Один содержит все созданные временные коды с эксклюзивным идентификатором # (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
,
Что лучше, или оба они уступают более распространенному методу?
Происходит быстрее, если вы выполняете 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'];
}
Других решений пока нет …