MySQL PHP将两行数据插入多维数组
我试图将数据从数据库中的两个表插入多维数组,但它做了一些我不知道如何修复的事情 首先,这是我的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
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=“,”;
}
回声';
}
回声';
以下是一些提示:
和(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。