如果标题写得不好,我深表歉意,因为我不确定到底该怎么调用它!
我有一个非常基本的表设置:employees 和employees_deductions。我想加入这两个并用 php 将内容显示在表格中。
我得到了员工:
$employees = $wpdb->get_results("SELECT * from employees");
然后我循环遍历 $employees
,在每一个上,我都会得到扣除额,然后将它们显示在表格中:(下面的代码已简化)
foreach($employees as $emp) {
$deductions = $wpdb->get_results("SELECT * FROM employee_deductions WHERE employee_id = $this_employee_id");
foreach($deductions as $ded) {
<tr>
<td>name</td>
<td>deduction</td>
</tr>
}
}
我的问题是,如果直接上方的行中的单元格包含完全相同的“名称”,如何才能在空白上方包含第一个包含“名称”的单元格?
我得到了什么:
+------+-----------+
| name | deduction |
+------+-----------+
| John | 100 |
| John | 142 |
| John | 204 |
| Mary | 200 |
| Mary | 340 |
+------+-----------+
期望的结果:
+------+-----------+
| name | deduction |
+------+-----------+
| John | 100 |
| | 142 |
| | 204 |
| Mary | 200 |
| | 340 |
+------+-----------+
最佳答案
您可以有一个额外的变量,用于存储姓氏或 ID,然后将其与当前名称/ID 进行比较。如果匹配,则仅显示一个空列,如果不匹配,则显示名称。
假设您的 SELECT
查询按名称排序,这是可行的:
foreach($employees as $emp) {
$lastid = ''; /* WHERE YOU WILL STORE THE LAST ID OR NAME; JUST LEAVE IT EMPTY AT FIRST */
$deductions = $wpdb->get_results("SELECT * FROM employee_deductions WHERE employee_id = $this_employee_id");
foreach($deductions as $ded) {
echo '<tr>';
// JUST REPLACE THE CORRESPONDING VARIABLE/CONDITION BELOW
echo (empty($lastid) || $lastid != $this_employee_id)?'<td>name</td>':'<td></td>';
echo '<td>deduction</td>
</tr>';
$lastid = $this_employee_id; /* STORE THE CURRENT ID/NAME TO THIS VARIABLE */
}
}
关于php - 循环不重复表列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41560313/