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