[英]How to make a nested looping from three tables of database?
我有 3 个表: m_house
、 m_progress
和t_report
。
m_house
|id_house|number_house|
+--------+------------+
|1 |A23 |
+--------+------------+
|2 |A24 |
+--------+------------+
|3 |A25 |
+--------+------------+
and so on...
m_progres
|id_progress|name_progress|
+-----------+-------------+
|1 |floor |
+-----------+-------------+
|2 |wall |
+-----------+-------------+
|3 |roof |
+-----------+-------------+
and so on...
t_report
|id_report|id_house|id_progress|date |
+---------+--------+-----------+----------+
|1 |1 |1 |2021-01-02|
+---------+--------+-----------+----------+
|2 |1 |2 |2021-01-05|
+---------+--------+-----------+----------+
|3 |2 |1 |2021-01-09|
+---------+--------+-----------+----------+
and so on...
我想做的是这样的表格:
|number_house|floor|wall|roof|
+------------+-----+----+----+
|A23 |1 |1 | |
+------------+-----+----+----+
|A24 |1 | | |
+------------+-----+----+----+
1 表示正确。 到目前为止,我正在考虑使用嵌套循环方法。 所以在第一个循环中是循环number_house
女巫是<tr>
并且第一个循环中的第二个循环是循环t_report
数据。 但问题是我不知道它必须是怎样的数组数据。 也许你有另一种方法。
此查询语句将以您想要的方式获取结果
SELECT results.house_number, SUM(results.Floors) > 0 as Floors, SUM(results.Walls) > 0 as Walls, SUM(results.Roofs) > 0 as Roofs FROM (
SELECT house_number, COUNT(floors.name_progress) AS Floors, COUNT(walls.name_progress) AS Walls, COUNT(roofs.name_progress) AS Roofs FROM t_report
LEFT JOIN m_house ON m_house.id_house = t_report.id_house
LEFT JOIN m_progress floors ON floors.id_progress = t_report.id_progress AND floors.name_progress = "floor"
LEFT JOIN m_progress walls ON walls.id_progress = t_report.id_progress AND walls.name_progress = "wall"
LEFT JOIN m_progress roofs ON roofs.id_progress = t_report.id_progress AND roofs.name_progress = "roof"
GROUP BY t_report.id_house, house_number, floors.name_progress, walls.name_progress, roofs.name_progress) results
GROUP BY house_number
如果您开始进行这样的查询,那么最好看看如何最好地重新组织您的表数据。 第一行出现 3 次的 > 0 部分,如果删除它们,您将获得楼层、墙壁和屋顶的总数,而不是 1 为真。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.