我正在尝试将数据从我的数据库中的两个表插入到多维数组中,但它确实做了一些我不知道如何解决的问题。
首先,这是我的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();
此脚本从数据库中取出一些值并将它们插入到数组中。我的数据库看起来像这样: (objects_price)
(材料)
现在发生的事情是它只输出:
如果我将数据库查询更改为:
if ($stmt = $mysqli->prepare('SELECT objects_price.object_id, materials.material_id, materials.name, material_amount
FROM objects_price
INNER JOIN materials
')) {
它输出:
因此,此表的左侧显示正确,但右侧仅显示价格的第一行,(47)。它应该是这样的:
我不知道通过更改数据库查询是否可以轻松实现。但我希望我能在这里得到一些建议,建议或帮助。提前谢谢。
答案 0 :(得分:2)
尝试在桌面上使用左连接:
$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'];
}
如果每个对象有超过1种材质,那么只需对多维数组使用这种轻微调整
$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>';
一些提示:
USING(column_name)
。答案 1 :(得分:1)
除了这些行之外,代码中的所有内容都很好看:
while ($stmt->fetch()) {
$k = 1;
正在发生的是$ k被声明并且赋值为1.因为它在循环中,每次运行该行时,值都会返回1.要解决此问题,只需将该值放在循环外部像这样:
$k = 1;
while ($stmt->fetch()) {
//blah blah blah
}