誰かがこれを解決できることを願っています。PHP PDOのforeachループで余分なテーブル出力が得られる
私は、次の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つのレコードがあります。しかし、1つのリストの代わりに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>
ホープこれはには、私を助けるために望んでいるものには明らかです。私にもっと説明するだけではない場合は、 (Btw:プライベートな実際のデータを保持しているため、テーブルの結果を一部変更しました)
ありがとうございます。
EDIT:
ちょうどデータベースに私は例えばを持つusersテーブルをループT2上の多くの関係(minister_idというフィールドを持つユーザーを保持している)
を持ってdienarenテーブルを持っていることを指摘。 5つの結果が5つの結果(zieスクリーンショット2)で5回作成されたテーブルがあります。代わりに私が望むのは、これらの5つの結果を保持するただ1つのテーブルです。私は正しいループ機能を使用していないと思うか、とにかくそれを正しく使用していないと思います。
SECOND EDIT:
私は私の解決策の近くに私を得た異なるアプローチを取りました。私はJOINクエリからSELECT * FROM T1に変更しました。欠点は、結果が0のすべてのレコードも表示することだけです。だから私はどのようにT2のクエリからの結果がないT1の人からテーブルの作成をすることができますか?
(この場合はID:861は5つのレコードを保持しているが、ID:862にレコードを持っていませんが、またある空であるテーブルを持っている私が空のテーブルを取り除きたい)
最初のクエリを印刷して、何人の人物IDが印刷されているかを調べることができます。これは1回または複数回の印刷です。 –
@ImranSaleem私は最初のものよりもうまくいった別のアプローチを採用しました。私はあなたの答えは私が探していますものではありません – Brnovich