php - 如何从2个表中获取所有数据并显示所有不工作的数据

标签 php mysql left-join

我正在尝试从商品表和库存表中获取数据并显示信息。我遇到的问题是所有内容都显示正确,除了它只显示我的库存表中的内容,并且我希望它显示项目表中的所有项目和库存表中的数量。我如何正确地做到这一点这是我的代码

$result= mysqli_query($link, "SELECT * FROM items LEFT OUTER JOIN inventory ON inventory.itemid=items.id WHERE inventory.userid = '".$userid."'");


while($row = mysqli_fetch_array($result) ) {



    if ($row['type'] == 0 && $row['level'] > 0){
        $item .= "

        <td width='200px'>
            <form action='gear.php' method='post'>
                <div class='featured_items'><img src='". $row['image']."' width='80' height='80' style='border: 1px solid #333'></div>
                <div class='featured_items_info'>". $row['itemname'] ." <br />
                    Att ". $row['attack'] ."
                    | Def ". $row['defense'] ."<br />
                    Cost ". $row['cost'] ."<br />
                    Own ". $row['quantity'] ."<br />



                <input type='hidden' name='gear_id' value='". $row['id'] ."' />
                <input type='submit' value='Buy' />
            </form>

        </td>

        "; 
    }   
}

最佳答案

左联接未按您预期的方式工作,因为您使用了属于 inventoryuser_id 字段。将条件移至 on 将修复该问题:

SELECT id, type, level, image, itemname, attack, defense, 
    cost, coalesce(inventory.quantity, 0) quantity
FROM items 
LEFT OUTER JOIN inventory ON inventory.itemid=items.id and inventory.userid = '".$userid."'"

只需确保在 select 中使用 coalesce 来处理用户没有的项目。

关于php - 如何从2个表中获取所有数据并显示所有不工作的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34834401/

相关文章:

MySQL从左连接和右连接的结果插入导致内存问题

mysql - 等于此右连接的左连接是什么?

php - 在我的例子中,在 php 中插入的准备语句失败

PHP 表单转储整个 MySQL 数据库,除非数据库中不存在任何输入变量

php - 将数组中的值放入带有键的二维数组中

MySQL 无法在 SqLite 中运行 我可以使用 Doctrine2 查询生成器构建它吗?

php - 将带有表单操作 html 的参数传递给 php

php - 如何在亚马逊网络服务器中迁移已部署的 laravel 项目

php - SQL 获取两列 Yes 或 No

mysql - (My)SQL 如何评估链式 LEFT/INNER JOIN?