繁体   English   中英

如何从三个数据库表中进行嵌套循环?

[英]How to make a nested looping from three tables of database?

我有 3 个表: m_housem_progresst_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM