Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:使用MySQL链接两个表以正确显示数据_Php_Mysql_Database - Fatal编程技术网

PHP:使用MySQL链接两个表以正确显示数据

PHP:使用MySQL链接两个表以正确显示数据,php,mysql,database,Php,Mysql,Database,我有两张表格以不同的方式连接在一起,我将尽我所能解释我在寻找什么,以及我迄今为止所取得的成就 我正在寻找的是: 首先,我有一个表objects\u price和一个表materials。这些表格如下所示: 对象\u价格: 材料: 好的,我有一些物体,可以是椅子,桌子或者任何你能想象到的家具。所有对象都连接到第三个表,其中包含有关该对象的信息。每个对象都需要某种材质才能制作。正如您在objects\u price表中所看到的那样,id为1的对象需要47个等于1的材质。正如您在材料表中看到的那样

我有两张表格以不同的方式连接在一起,我将尽我所能解释我在寻找什么,以及我迄今为止所取得的成就

我正在寻找的是: 首先,我有一个表
objects\u price
和一个表
materials
。这些表格如下所示:

对象\u价格

材料

好的,我有一些物体,可以是椅子,桌子或者任何你能想象到的家具。所有对象都连接到第三个表,其中包含有关该对象的信息。每个对象都需要某种材质才能制作。正如您在
objects\u price
表中所看到的那样,
id
为1的对象需要47个等于1的材质。正如您在
材料
表中看到的那样,这是
橡木原木

id为2的对象需要两种材质:材质2和材质3。它需要20块
石头
和30块
桦木原木

为了让一切更清楚一点,这里有一张图片显示了我刚才解释的内容:

到目前为止,我有两个查询,其中一个查询不符合我的要求,特别是因为我使用数组来显示材质和数量,但我的代码所做的是显示所有对象中的所有材质,现在看起来是这样的:

问题在于此查询及其创建数组的方式:

$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
}
foreach($arr as$name=>$objects){
?>

foreach($arr作为$key){


首先,您的查询中没有
WHERE
子句来限制特定的
对象id
。其次,您可能希望使用
JOIN
而不是
LEFT JOIN
。嗯,是的,但我想在数组中插入所有材质及其数量,并使它们一次显示一个对应于对象id的材质与
objects\u-price
中的
object\u-id
相同的id感谢您的输入谢谢您的输入!我尝试了您的代码,结果所有的对象都需要相同的材料。因此对象没有什么不同。我会预先显示查询结果,看看实际返回的是什么。如果一切看起来都很好,我会打印出来_我已经手动创建了一个数组,因为我不想像这样重新创建您的表:$arr=array();$arr[1]['birch_-log']=20;$arr[1]['stone']=30;$arr[2]['birch_-log']=40;$arr[2]['stone']=60;$arr[2]['oak_-log']=100;那么您似乎没有从查询中获得正确的结果。嗯,我想,我不太确定我要查找的结果是什么。我们是否要将所有内容都放在数组中?您需要打印$arr以查看这是否正确。我建议在不使用php的情况下在Mysql中运行查询,以查看结果集中得到的内容。
    while($row = $result->fetch_assoc()) {
    $arr[$row['object_id']][$row['name']] = $row['material_amount'];
    }
$material_array = $key;

foreach ($material_array as $k => $v){
echo "<p>$k | $v</p>";
}
}