我正在构建一个应用程序,其中我有多个MySQL表,我需要创建一个多维的PHP数组,但我对如何查询它有点困惑。我已经搜索了很多解决方案,但其中很多都来自一个数据库表。
该应用程序是一个公司的调度软件,这个特殊的部分是他们可以显示客户名称和客户所在的卡车,以及每辆卡车上的材料。
我的目标是看起来与此相似:
一次只能有一个客户名称(每天超过一个,但循环中只列出一个)。不同数量的卡车可以在每个工作中携带不同类型和数量的材料。一些较小的工作只有一辆卡车和一种材料,但较大的工作可能有一辆以上的卡车运载多种材料类型。上面的图片被认为是一个更大的工作,多辆卡车运载多种材料。较小的工作看起来一样,但只有客户的名字,并显示“卡车8:”和“材料1”(或当天安排的任何卡车及其上的材料)。
这些是我正在使用的表格:
上面会输出: 日期:2015年2月27日
卡车8 :(空)
工作:439(琼斯)
我首先查询jobs
表(未显示)并返回jobs.id
,jobs.name
和jobs.date
。当我需要根据日期(显然)访问信息时,jobs.date
最终会出现在查询的WHERE子句中。我假设,下一步是查询job_truck
表...两个表之间的链接为job_truck.id
和materials.job_truck
。接下来将通过查询materials.material
并链接到job_truck_material.material
到materials.id
(job_truck_material.material
作为材料表的ID)来查找每辆卡车的材料。
我已经尝试过加入表格,但这样做我只返回每个项目中的一个,如:1-job,1-truck,1-material。我确定加入表可能是要走的路,但这就是为什么我在这里,因为我不确定结构是否正确。我也尝试过嵌套循环,但这也没有成功。
我真的希望我能正确解释......任何帮助都非常感谢。提前谢谢!
答案 0 :(得分:0)
尝试查询JOIN
上的所有行,然后迭代渲染为多维:
$query = "SELECT *, materials.id AS material_id FROM job_truck JOIN job_truck_material ON job_truck_material.job_truck = job_truck.id JOIN materials ON job_truck_material.material = job_truck_material.id";
$jobs = array();
foreach ($conn->query($query ) as $row) {
$job_id = $row['jobid'];
$truck_id = $row['truck_id'];
if(empty($jobs[$job_id])) {
$jobs[$job_id] = array();
}
if(empty($jobs[$job_id][$truck_id])) {
$jobs[$job_id][$truck_id] = array();
}
$jobs[$job_id][$truck_id][$row['material_id']] = $row['material'];
}