Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 为什么我的查询返回不正确的结果?_Php_Mysql - Fatal编程技术网

Php 为什么我的查询返回不正确的结果?

Php 为什么我的查询返回不正确的结果?,php,mysql,Php,Mysql,大约两周前,我最近问了一个类似的问题,但我没有考虑让我的问题以我需要的方式解决 我有一个从2个表中选择的查询;门票和回复。我从ticket表中选择信息,从repless表中选择信息,其中存储了ticket id。现在我的问题来了 我的查询仅显示答复数超过0的票证,但我需要它显示票证信息,即使它没有任何答复 我想知道(如果可能的话)是否有办法解决我的问题,是否有办法使它比我目前拥有的更简单 现在有点混乱,但下面是我的is代码,用于查询和显示票证和回复 if(isset($_GET['id'])

大约两周前,我最近问了一个类似的问题,但我没有考虑让我的问题以我需要的方式解决

我有一个从2个表中选择的查询;门票和回复。我从ticket表中选择信息,从repless表中选择信息,其中存储了ticket id。现在我的问题来了

我的查询仅显示答复数超过0的票证,但我需要它显示票证信息,即使它没有任何答复

我想知道(如果可能的话)是否有办法解决我的问题,是否有办法使它比我目前拥有的更简单

现在有点混乱,但下面是我的is代码,用于查询和显示票证和回复

 if(isset($_GET['id']) && is_numeric($_GET['id'])) {
    $id = trim($_GET['id']);
    $i = "";

    $ticket = $db->conn->query("
                                SELECT * FROM tickets
                                INNER JOIN replies ON tickets.id = '$id'") or die(mysqli_error($db->conn));

    while($rows = $ticket->fetch_assoc()) {
        $i++;
        if($_SESSION['ticket_username'] == $rows['client']) {
            if($i <= 1) {
                $status = $rows['status'];
                echo '
                    <h3>'.$rows['subject'].'</h3><hr>

                    <div class="panel panel-danger">
                    <div class="panel-heading">
                        <h3 class="panel-title"><small>Created by '.$rows['client'].', '.$timeAgo->inWords($rows['created_at']).'</small></h3>
                    </div>
                    <div class="panel-body">'.nl2br($rows['message']).'</div>
                    </div>
                ';
            }

            echo '
                <div class="panel panel-info">
                    <div class="panel-heading">
                        <h3 class="panel-title"><small>Reply from '.$rows['reply_username'].', '.$timeAgo->inWords($rows['reply_time']).'</small></h3>
                    </div>
                    <div class="panel-body">'.nl2br($rows['reply_message']).'</div>
                    </div>
                ';

        } else {
            header("Location: index");
        }
    }
} else {
    header("Location: index");
}
if(isset($\u GET['id'])和&is_numeric($\u GET['id'])){
$id=trim($_GET['id']);
$i=“”;
$ticket=$db->conn->query(“
从票证中选择*
内部连接对tickets.id='$id')或die(mysqli_错误($db->conn))的响应;
而($rows=$ticket->fetch_assoc()){
$i++;
if($\会话['ticket\u username']==$rows['client'])){
如果($i in words($rows['created_at'])
“.nl2br($rows['message'])”
';
}
回声'
从“$rows['Reply\u username']”回复,“..$timeAgo->inWords($rows['Reply\u time'])。”
“.nl2br($rows['reply_message'])”
';
}否则{
标题(“位置:索引”);
}
}
}否则{
标题(“位置:索引”);
}
更改查询

使用
左连接
而不是
内部连接

$ticket = $db->conn->query("SELECT * FROM tickets
LEFT JOIN replies ON tickets.id = '$id'") or die(mysqli_error($db->conn));

说明:

  • 内部联接仅返回两个表的值,以获取 匹配。这是一种两个圆相交的东西
  • 左联接返回左表中的所有行 是否有任何匹配在正确的表上
  • 在您的例子中,如果使用内部联接,则只返回那些有回复的票证


    引用的图像您可以通过划分查询来简单地解决它。首先获取所有票证。循环遍历票证并获取每个票证的所有回复。我做了与上一个项目类似的操作,但这次我想将其合并到一个查询中。我在上一次尝试中使用了LEFT JOIN,但得到了相同的结果。只是现在将其添加到左连接并添加WHERE子句,得到了我想要的结果。谢谢。