我有两个表以不同于我想要的方式连接,我会尽力解释我要搜索的内容,以及到目前为止我自己完成的内容。
我在寻找什么:
首先,我有一个表objects_price
和一个表materials
。这些表格如下所示:
objects_price
:
materials
:
好的,所以我有一些物品,可以是椅子,桌子或任何你可以成像的家具。所有对象都连接到第三个表,其中包含有关该对象的信息。每个物体都需要某种材料才能制作出来。正如您在objects_price
表中看到的那样,id
为1的对象需要47个等于1的材料。Oak Log
正如您在{{1}中看到的那样materials
}表。
id为2的对象需要两种材质,即材质2和3.它需要20 Stone
和30 Birch log
为了让一切变得更加清晰,还有一张图片展示了我刚刚解释过的内容:
到目前为止,我有两个查询,其中一个不能达到我想要的效果,特别是因为我使用数组来显示材料和数量,但我的代码所做的是它显示所有的所有对象中的材质,现在看起来像这样:
问题在于此查询及其创建数组的方式:
$query = 'SELECT objects_price.object_id, materials.material_id, materials.name, material_amount
FROM objects_price
LEFT JOIN materials USING(material_id)';
$result = $mysqli->query($query);
$arr = array();
while($row = $result->fetch_assoc()) {
$arr[$row['name']][] = $row['material_amount'];
}
以及我为对象提供相应材料的方式:
foreach($arr as $name => $objects) {
?>
<p><?php echo $name; ?><i style="float:right;"><?php foreach($objects as $material_amount) { echo $material_amount; } ?></i></p>
<?php
}
我希望我说清楚,请告诉我你是否希望我提供更多代码,更多图片或解释或类似的东西。任何帮助,建议或建议都非常感谢。谢谢你的时间。
答案 0 :(得分:1)
while($row = $result->fetch_assoc()) {
$arr[$row['object_id']][$row['name']] = $row['material_amount'];
}
...
foreach($ arr as $ key){
$material_array = $key;
foreach ($material_array as $k => $v){
echo "<p>$k | $v</p>";
}
它会正确显示材料名称和数量,但没有对象本身的名称。
}