Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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
连接3个MySQL表以显示所有数据_Mysql_Database - Fatal编程技术网

连接3个MySQL表以显示所有数据

连接3个MySQL表以显示所有数据,mysql,database,Mysql,Database,我读过无数关于stackoverflow的文章,内容与此类似,但我正在努力解决我的问题,并理解各种MySQL连接查询。我正在学习MySQL的早期阶段,任何帮助都将不胜感激 我有三张桌子: 拍卖 类别 很多 auction和category只是分别有一个唯一的主键和一个auction date、category title列 批次显示批次标题、批次描述等。。。并使用各自的ID链接到拍卖和分类表 我只想显示地块表,显示所有行,包括拍卖日期和类别标题。 我失败的尝试: SELECT l.lotid,

我读过无数关于stackoverflow的文章,内容与此类似,但我正在努力解决我的问题,并理解各种MySQL连接查询。我正在学习MySQL的早期阶段,任何帮助都将不胜感激

我有三张桌子:

  • 拍卖
  • 类别
  • 很多
  • auction和category只是分别有一个唯一的主键和一个auction date、category title列

    批次显示批次标题、批次描述等。。。并使用各自的ID链接到拍卖和分类表

    我只想显示地块表,显示所有行,包括拍卖日期和类别标题。

    我失败的尝试:

    SELECT l.lotid, l.lotnumber, l.lottitle, l.lotdescription, c.categorytitle, a.auctiondate, l.estimatefrom, l.estimateto, l.photo, l.datecreated, l.lastmodified 
    FROM lot l
    JOIN category c ON l.categoryid = c.categoryid
    JOIN auction a ON l.auctionid = a.auctionid
    ORDER BY l.lotnumber;
    
    这就像一个WHERE查询一样,我相信它应该这样做,省略了
    categorytile
    auctiondate
    不匹配的任何行

    有简单的解决方法吗


    非常感谢

    使用
    左键加入

    SELECT 
        l.lotid, 
        l.lotnumber, 
        l.lottitle, 
        l.lotdescription, 
        IFNULL(c.categorytitle,'n/a'), 
        IFNULL(a.auctiondate,'n/a'), 
        l.estimatefrom, 
        l.estimateto, 
        l.photo, 
        l.datecreated, 
        l.lastmodified 
    FROM 
        lot l
    LEFT JOIN category c 
        ON l.categoryid = c.categoryid
    LEFT JOIN auction a 
        ON l.auctionid = a.auctionid
    ORDER BY 
        l.lotnumber;
    

    您可以简单地使用left join或right来减少行数,从而获得适当的数据


    以下是教程:&。

    为了节省时间和耐心,我简单地编写了一段很长的代码,加入一个子查询以获得我想要的结果:

    <?php
    $query = "SELECT l.lotid, l.lotnumber, l.lottitle, l.lotdescription, c.categorytitle, l.estimatefrom, l.estimateto, l.photo, l.datecreated, l.lastmodified 
             FROM lot l
             JOIN category c ON l.categoryid = c.categoryid
             ORDER BY l.lotnumber";
    
    if (!$mysqli->query($query)) {
        echo '<p class="warning">Error executing SELECT query: (' . $mysqli->errno . ') ' . $mysqli->error . "</p>";
    }
    
    if ($result = $mysqli->query($query)) {
    
      while ($row = $result->fetch_row()) {
    
    ?>
        <div class="clearfix lot-bg">       
            <p>Lot Number: <span><?php echo $row[1]; ?></span></p>
            <p>Lot Title: <span><?php echo $row[2]; ?></span></p>
            <p>Lot Description: <span><?php echo $row[3]; ?></span></p>
            <p>Category: <span><?php echo $row[4]; ?></span></p>
    
            <?php
    
            $subquery = "SELECT a. auctiondate 
                         FROM lot l
                         JOIN auction a ON l.auctionid = a.auctionid
                         WHERE lotid = $row[0]";
    
            if ($subresult = $mysqli->query($subquery)) {
    
                if ($stmt = $mysqli->prepare($subquery)) {
    
                $stmt->execute();
                $stmt->store_result();
    
                $subrows = $stmt->num_rows;
    
                   for ($j = 0; $j < $subrows; ++$j) {
                        while ($subrow = $subresult->fetch_row()) {
                            echo '<p>Auction Date: <span>' . $subrow[0] . '</span></p>';
                        }
                    }
                }
                $stmt->close();
            }
            $subresult->close();
    
            ?>
    
            <p>Estimate:  <span>£<?php echo $row[5]; ?> - £<?php echo $row[6]; ?></span></p>
            <p>Date Created: <span><?php echo $row[8]; ?></span></p>
            <p>Last-Modified:  <span><?php echo $row[9]; ?></span></p>
            <figure><a class="fancybox" rel="group" href='img/<?php echo $row[7]; ?>'><img src='img/<?php echo $row[7]; ?>'></a></figure>
    
            <div class="buttons">           
                <form class="form-signin form-delete" action="lot.php" method="post">
                    <input type="hidden" name="delete" value="yes" />
                    <input type="hidden" name="lotid" value='<?php echo $row[0]; ?>' />
                    <button type="submit" class="btn btn-small btn-primary btn-block">DELETE</button>
                </form>
                <form class="form-signin form-delete" action="lotupdate.php" method="post">
                    <input type="hidden" name="edit" value="yes" />
                    <input type="hidden" name="lotid" value='<?php echo $row[0]; ?>' />
                    <button type="submit" class="btn btn-small btn-primary btn-block">EDIT</button>
                </form>
                <form class="form-signin form-delete" action="lotupdate.php" method="post">
                    <input type="hidden" name="photo" value="yes" />
                    <input type="hidden" name="lotid" value='<?php echo $row[0]; ?>' />
                    <button type="submit" class="btn btn-small btn-primary btn-block">PHOTO</button>
                </form>
            </div>
        </div>
    
    <?php
    
        }
        $result->close();
    }
    $mysqli->close();
    ?>
    
    
    批号:

    地段名称:

    地段说明:

    类别:

    估计数:-

    创建日期:

    上次修改:


    这是一个改进,但是现在categorytitle和auctiondate不匹配的行已经丢失了它们的auctiondate-它被替换为NULL???@SamHolguin它被替换为“n/a”
    IFNULL(c.categorytile,'n/a')
    抱歉,我错过了您选择的IFNULL包含项。这再一次改善了情况:)然而,我希望显示每个地块的所有拍卖日期。对不起,我不清楚。每个地段都有一个拍卖ID链接到拍卖表,以确定它的日期,我希望显示所有这些它取决于你想要什么。。。如果您需要所有表中的所有行,那么
    FULL OUTER JOIN
    是goCOALESCE()符合SQL标准的方法。而且,它的可扩展性更强,看起来也更好。谢谢你的支持。我希望在这个实例中显示所有行,但我不希望在数据值为空的地方显示空值was@SamHolguin然后你需要使用的是null,在那里克劳塞洛金在完全加入,我仍然不会得到我想要的…那只是显示匹配和所有没有匹配,仍然使用null:)我完全迷路了!!hahaI认为这将是如此简单…只要从一个连接扩展到两个,它就会工作