php-クエリの値を合計し、プロジェクトIDでフィルタリングされたテーブルに表示します
学校のウェブサイトで作業していますが、問題が発生しました。フロントページに表示されている値とは異なるテーブルにある値を合計する必要があります。
さらに説明させてください:
このスクリーンショットには、Plan and Do
を含むヘッダーが表示されています。- 計画=プロジェクトに費やす予定の合計時間。
- 実行=プロジェクト全体に費やした時間。
これは、テーブルにデータを入力するために使用する単純なクエリとコードです:
<?php
$query = mysqli_query($conn, "SELECT * FROM `projecten`");
while ($row = mysqli_fetch_array($query)) {?>
<tr class="active">
<td style="display:none;" class="id"><?php echo $row['ID'];?></td>
<td><?php echo $row['Naam'];?></td>
<td><?php echo $row['Plan'];?></td>
<td><?php echo $row['Do'];?></td>
<td>
<a class="btn btn-default btn-success" href="ExpandedProject.php?id=<?php echo $row['ID'];?>">Expand</a>
<a class="btn btn-default btn-danger" href="Delete_Project.php?id=<?php echo $row['ID'];?>">Verwijderen</a>
</td>
</tr>
<?php } ?>
今私がやろうとしたこと:
SQL = SELECT *, sum(tasks.Plan) FROM `projecten`,`tasks`
これは機能しましたが、さまざまなプロジェクトのすべてのタスクに対して1つのテーブルがあるため、プロジェクトの一部ではないタスクが追加されます。だから私はこれをもう一度削除しました。
また、上記のクエリを使用して、タスクテーブル内のプロジェクトIDをフィルタリングする場所を追加してみました。
私の質問は、PlanとDoを合計し、これらの値を適切に表示し、プロジェクトIDでフィルタリングできるようにするにはどうすればよいですか?
PHPに関しては左手が2つあることをお知らせしたかったので、コードに誤りがあった場合は申し訳ありません:)
自分が持っているテーブルの写真ももっと入れたかったのですが、評判が良かったので追加できませんでした。
助けてくれてありがとう!
答え :
解決策:
次のように行うことができます:
SELECT p.id,
p.naam,
coalesce(sum(t.plan),0) plan,
coalesce(sum(t.do),0) do
FROM projecten p
LEFT JOIN tasks t
ON p.id = t.projectid
GROUP BY p.id,
p.naam
LEFT JOIN
は、2つのテーブルのレコードをリンクする外部結合であり、対応するタスクレコードが見つからない場合に対応する追加機能があります。 projecten レコードが与えられた場合、 projecten レコードは引き続き結果に含まれますが、通常は列となる null
値が含まれます。タスクレコードから。
group by
句は、複数のタスクレコードを集約するため、 projectenレコードごとに1つのレコードしか取得できません。 sum
式は、SQLエンジンにこの集計の方法を指示します。
coalesce
関数は、 tasksレコードのないprojectenレコードがtasksレコードを表示しないようにするために含まれています。 PlanおよびDoの場合はcode>nullですが、代わりに0です。その場合に空白を使用する場合は、 coalesce(...、0)
を削除し、 sum(...)<だけを残します。 /code>。
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。