【发布时间】:2017-05-18 02:09:01
【问题描述】:
希望有人能解决这个问题。
我有以下 MySQL 查询:
$sql = $db->prepare("SELECT
dienaren.id,
dienaren.achternaam_minister,
dienaren.email_minister,
dienaren.gemeente,
users.achternaam,
users.email,
users.periode_van,
users.periode_tot
FROM dienaren
LEFT JOIN users
ON dienaren.id = users.minister_id
WHERE users.periode_tot < DATE_ADD(CURDATE(), INTERVAL + 31 DAY)
ORDER BY dienaren.id,users.periode_tot ASC");
$sql->execute();
这给了我 29 行的结果(我检查过这是正确的)
现在我想使用一种循环来显示一个表,其中人 A 有 x 行与查询相对应。对于 B 人、C 人等来说也是如此。
这是当前输出的截图:
如您所见,此人有 2 条记录是真实的。但它显示的是两个列表而不是一个总列表。
这是生成此表的代码:
<?php
$count = $sql->rowCount();
echo '<p>Total result SQL query: '.$count.'</p>';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php foreach($sql->fetchAll(PDO::FETCH_OBJ) as $voorganger): ?>
<div><strong>Person ID: <?= $voorganger->id;?></strong></div>
<div>Is in control of the following users:</div>
<table>
<tr>
<th>Voorletter(s)</th>
<th>Periode Tot</th>
<th>Status</th>
</tr>
<?php
$query = $db->prepare("SELECT * FROM users WHERE minister_id = '{$voorganger->id}' AND periode_tot < DATE_ADD(CURDATE(), INTERVAL + 31 DAY) ORDER BY minister_id ASC");
$query->execute();
foreach($query->fetchAll(PDO::FETCH_OBJ) as $user) : ?>
<?php $date = new DateTime($user->periode_tot); ?>
<tr style="background:rgba(244, 65, 55, 0.35);">
<td><?= $user->voorletters; ?></td>
<td><?= $date->format('d-m-Y'); ?></td>
<?php if (dateDifference($user->periode_tot,$currentdate) > 0 && dateDifference($user->periode_tot,$currentdate) <= 30) { ?>
<td>Verloopt over <?= dateDifference($user->periode_tot,$currentdate); ?> dagen</td>
<?php } else { ?>
<td>Verlopen</td>
<?php } ?>
</tr>
<?php endforeach; ?>
</table>
<hr>
<?php endforeach; ?>
</body>
</html>
希望想要帮助我的人清楚这一点。如果不只是让我知道解释更多。 (顺便说一句:我更改了表格中的一些结果,因为它保存了私有的实际数据)
提前致谢。
编辑:
只是指出,在数据库中,我有一个 dienaren 表,它在 T2 上有很多关系(用一个名为 Minister_id 的字段保存用户)
遍历用户表,例如。 5 个结果有一个表格创建了 5 次,所有 5 个结果(zie 截图 2)。相反,我想要的只是一张包含这 5 个结果的表。我认为我没有使用正确的循环函数,或者我没有正确使用它。
第二次编辑:
我采用了不同的方法,使我接近了我的解决方案。我从 JOIN 查询更改为 SELECT * FROM T1。唯一的缺点是它还显示所有结果为 0 的记录。那么如何防止从 T1 中的人创建一个表,而 T2 中的查询没有结果呢?
(在这种情况下 ID:861 包含 5 条记录,但 ID:862 没有记录但也有一个空表。我想摆脱空表)
【问题讨论】:
-
你能打印第一个查询吗,看看打印了多少人id,打印861一次还是多次
-
@ImranSaleem 我采用了一种不同的方法,效果比我的第一种方法更好。我会更新我的Q