用php为foreach编写代码的最佳实践->;foreach->;如果(第一个循环id==第二个循环id)->;结果
第一循环表 user_id | fname | lname 1 | first | emp 2 | second| emp 3 | third | emp shift_id | employee_id 1 | 1 2 | 2 3 | 2用php为foreach编写代码的最佳实践->;foreach->;如果(第一个循环id==第二个循环id)->;结果,php,mysql,foreach,Php,Mysql,Foreach,第一循环表 user_id | fname | lname 1 | first | emp 2 | second| emp 3 | third | emp shift_id | employee_id 1 | 1 2 | 2 3 | 2 我得到了正确的结果,但我认为有更好的方法来写这篇文章。您可以在表中使用连接。Left join意味着用户行必须存在(因为:Left),并且shifts enty是可选的 SELECT
我得到了正确的结果,但我认为有更好的方法来写这篇文章。您可以在表中使用连接。Left join意味着用户行必须存在(因为:Left),并且shifts enty是可选的
SELECT user.user_id, user.fname, user.lname, shifts.shift_id
FROM yourUserTable AS user
LEFT JOIN yourShiftsTable AS shifts ON(user.user_id = shifts.employee_id)
现在,您可以在初始数组中获得它,就好像您要从表中选择它作为一行一样,不再需要在PHP中使用技巧来组合信息。如果可以,请始终尝试让数据库管理数据,这样做的速度比PHP快
请注意,这个问题可能有点不对劲,我只是在脑海里写下了这个问题。你也可以这样做。稍微短一点
SELECT TABLE1.FNAME, TABLE1.LNAME, TABLE2.EMPLOYEE_ID
FROM TABLE1, TABLE2
WHERE TABLE1.USER_ID = TABLE2.EMPLOYEE_ID;
只是一些测试代码,我从为这个“演示代码”提供的信息中快速生成来测试它 注意:我对数据库使用了mysqli类(实例化$db),并排除了SQL表设置 你会有一些类似的东西 案例1-原件
$db = new mysqli('localhost', 'root', 'test', 'phptutorials_st26');
echo '<h2>Create $employees </h2>';
$query = "SELECT * FROM users";
$result = $db->query($query);
$employees = $result->fetch_all(MYSQL_ASSOC);
var_dump($employees);
echo '<h2>Create $shifts </h2>';
$query = "SELECT * FROM shifts";
$result = $db->query($query);
$shifts = $result->fetch_all(MYSQL_ASSOC);
var_dump($shifts);
echo '<h2>Using foreach on $employees and $shifts</h2>';
if ($employees) {
foreach ($employees as $employee) {
foreach ($shifts as $shift) {
if ($employee['user_id'] == $shift['employee_id']) {
echo ucwords($employee['fname'] . ' ' . $employee['lname']);
echo '<br>';
}
}
}
}
案例2-使用连接
正如大家已经说过的,使用连接是一种方法
$sql = "SELECT u.user_id, u.fname, u.lname, s.shift_id
FROM users AS u
JOIN shifts AS s ON(u.user_id = s.employee_id)
";
$result = $db->query($sql);
$employees = $result->fetch_all(MYSQL_ASSOC);
// To see what comes out because we always check things.
var_dump($joined_result);
(别问我为什么我喜欢在表名中使用非常缩写的别名!这只是“一件事”。)
然后你的“循环”就变成了
echo '<h2>Using foreach on join</h2>';
foreach ($employees as $employee) {
echo ucwords($employee['fname'] . ' ' . $employee['lname']);
echo '<br>';
}
案例2-减少了代码,只需要一次数据库访问
这对您有帮助吗?您的代码中只有一个循环。您可以使用连接查询您可以在数据库端编写连接。它将只获取与您的条件匹配的记录。不需要创建任何循环。您当前的数据库查询是如何填充$employees的?对于查询来说,加入查询不是更好的建议,因为这将对数据库造成压力。你做得对,但我有兴趣知道你用单圈做了什么?
$sql = "SELECT u.user_id, u.fname, u.lname, s.shift_id
FROM users AS u
JOIN shifts AS s ON(u.user_id = s.employee_id)
";
$result = $db->query($sql);
$employees = $result->fetch_all(MYSQL_ASSOC);
// To see what comes out because we always check things.
var_dump($joined_result);
echo '<h2>Using foreach on join</h2>';
foreach ($employees as $employee) {
echo ucwords($employee['fname'] . ' ' . $employee['lname']);
echo '<br>';
}
First Emp
Second Emp
Second Emp