MySQL PHP将两行数据插入多维数组

MySQL PHP将两行数据插入多维数组,php,mysql,arrays,database,multidimensional-array,Php,Mysql,Arrays,Database,Multidimensional Array,我试图将数据从数据库中的两个表插入多维数组,但它做了一些我不知道如何修复的事情 首先,这是我的PHP脚本: if ($stmt = $mysqli->prepare('SELECT objects_price.object_id, materials.material_id, materials.name, material_amount FROM objects_price

我试图将数据从数据库中的两个表插入多维数组,但它做了一些我不知道如何修复的事情

首先,这是我的PHP脚本:

if ($stmt = $mysqli->prepare('SELECT objects_price.object_id, materials.material_id, materials.name, material_amount
                              FROM objects_price
                              INNER JOIN materials ON objects_price.material_id=materials.material_id
                             ')) {
    $stmt->execute();

    $stmt->bind_result($object_id, $material_id, $material_name, $material_amount);
    $j = 1;
    $arr = array();

    while ($stmt->fetch()) {
        $k = 1;
        if ($object_id == $k) {
            $arr[] = array($j, $material_name, $material_amount);
            $k++;
            $j++;
        }
    }

    $stmt->close();
此脚本从数据库中取出一些值并将它们插入数组中。我的数据库如下所示: (物品价格)

(材料)

现在的情况是,它只输出:

如果将数据库查询更改为:

if ($stmt = $mysqli->prepare('SELECT objects_price.object_id, materials.material_id, materials.name, material_amount
                            FROM objects_price
                            INNER JOIN materials
                            ')) {
它的输出是:

因此,该表的左侧显示正确,但右侧仅显示价格的第一行(47)。应该是这样的:

 $k = 1;
 while ($stmt->fetch()) {
     //blah blah blah
 }


我不知道通过更改数据库查询是否可以轻松实现这一点。但我希望我能在这里得到一些建议、建议或帮助。提前感谢。

尝试为您的表使用左连接:

$query = "SELECT m.name, op.objects_id
    FROM objects_price op 
    LEFT JOIN materials m USING(material_id)";
$result = $mysqli->query($query);
接下来需要改变的是处理结果的方式。很有可能你正在浏览结果,跳过了很多,这就是为什么你只得到一个。试试这个:

$arr = array();
while($row = $result->fetch_assoc()) {
    $arr[$row['objects_id']] = $row['name'];
}
如果每个对象有多个材质,则只需对多维数组进行此微调即可

$arr = array();
while($row = $result->fetch_assoc()) {
    $arr[$row['name']][] = $row['objects_id'];
}
然后,要从中生成表格,请执行以下操作:

echo '<table>';
foreach($arr as $name => $objects) {
    echo '<tr><td>' . $name . '</td><td>';
    $space = '';
    foreach($objects as $id) {
        echo $space . $id;
        $space = ", ";
    }
    echo '</td></tr>';
}
echo '</table>';
echo';
foreach($arr as$name=>$objects){
回显“.$name.”;
$space='';
foreach($id形式的对象){
echo$space.$id;
$space=“,”;
}
回声';
}
回声';
以下是一些提示:

  • 如果没有放入任何变量,则不需要准备查询。您可以如上所述运行它
  • 不要选择超过需要的列。如果只使用2,为什么要从表中获取所有列
  • 如果要连接两个表中名称相同的列,可以使用
    和(column\u name)

  • 代码中的所有内容看起来都很好,除了以下几行:

     while ($stmt->fetch()) {
        $k = 1;
    
    现在发生的事情是$k被声明并被赋予值1。因为它在循环中,所以每次运行该行时,该值都返回到1。要解决这个问题,只需将该值放在循环之外,如下所示:

     $k = 1;
     while ($stmt->fetch()) {
         //blah blah blah
     }
    

    啊,很好,但是如果我在
    对象\u price
    中的行数比
    material
    中的行数多,那么我怎么能把所有内容都发布出来呢?也许使用
    material\u id
    作为连接不是正确的解决方案。谢谢也许制作一个二维数组,并将所有对象id为1的材质值放在空间0(数组中)内,以及所有对象id为2的材质值放在数组中空间1内会更聪明。如果每个材质有多个对象,我已经更新了我的答案。每个材质只有一个对象数组。如下所示:
    $arr[$row['name'][$row['material\u amount']]=$row['object\u id']?然后我会像:$arr[1][1](示例)那样回显它,修改查询和while循环以在多维数组中存储材料数量而不是id。