在命名数据库中引用和调用信息的最佳方式是什么
What is the best way to reference and call info in a naming db
我有两个数据库。一个保存所有已创建的时间代码,该时间代码具有独占 id# (code_id
)。它看起来像这样:
----------------------------------------------
| time_codes |
----------------------------------------------
|code_id | dept_id | code_number | code name |
----------------------------------------------
| 10 | 9 | 13 | Excavation|
| 11 | 9 | 4 | Concrete |
| 12 | 11 | 73 | Masonry |
----------------------------------------------
然后我输入了时间 sheet 记录数据库,员工在其中记录了当天每项任务的时间。它看起来像这样:
---------------------------------------------------------------
| 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 |
---------------------------------------------------------------
我想在回忆记录 time_log
上的条目时参考 code_number,code_name
。我想知道最好的方法是在不增加服务器负担的情况下有效地引用它们。
我想到了两个方法;
1. 在拉取每个 time_log
记录的 while() 循环中,我可以创建一个 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_log
while() 循环之前进行此 time_codes
查询调用,并生成 time_codes
的数组。然后在 while() 循环中我可以以某种方式引用数组并拉出匹配 code_id
.
的 code_number, code_name
哪个更好,或者这两种方法都不如更常用的方法?
如果您使用一个查询在数据库中执行 JOIN 而不是分两步提取,速度会更快:
$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'];
}
我有两个数据库。一个保存所有已创建的时间代码,该时间代码具有独占 id# (code_id
)。它看起来像这样:
----------------------------------------------
| time_codes |
----------------------------------------------
|code_id | dept_id | code_number | code name |
----------------------------------------------
| 10 | 9 | 13 | Excavation|
| 11 | 9 | 4 | Concrete |
| 12 | 11 | 73 | Masonry |
----------------------------------------------
然后我输入了时间 sheet 记录数据库,员工在其中记录了当天每项任务的时间。它看起来像这样:
---------------------------------------------------------------
| 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 |
---------------------------------------------------------------
我想在回忆记录 time_log
上的条目时参考 code_number,code_name
。我想知道最好的方法是在不增加服务器负担的情况下有效地引用它们。
我想到了两个方法;
1. 在拉取每个 time_log
记录的 while() 循环中,我可以创建一个 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_log
while() 循环之前进行此 time_codes
查询调用,并生成 time_codes
的数组。然后在 while() 循环中我可以以某种方式引用数组并拉出匹配 code_id
.
code_number, code_name
哪个更好,或者这两种方法都不如更常用的方法?
如果您使用一个查询在数据库中执行 JOIN 而不是分两步提取,速度会更快:
$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'];
}