【发布时间】:2015-06-23 20:58:24
【问题描述】:
我尝试将两个 MySQLi 查询转换为一个连接查询。它在某种程度上有效,但并没有按照我想要的方式运作。
我有 2 张桌子、票和回复。我正在从票证查询中选择信息,并且我正在从其中存储有票证 ID 的回复表中选择信息。到目前为止,我正在输出初始票证消息和第一个回复,但是对于该票证的每个回复,它都会重复此操作。所以我目前的输出是这样的:
Initial message
First reply
Initial message
Second reply
Initial message
Third reply
它为这张票的每个回复输出初始消息。我只希望它输出一次初始消息,然后输出这张票的回复。到目前为止,我已经尝试了几种不同的方法来执行此连接查询,但这就是我现在所拥有的:
$ticket = $db->conn->query("SELECT tickets.client, tickets.subject, tickets.message, tickets.created_at, tickets.status,
replies.reply_username, replies.reply_message, replies.reply_time
FROM tickets, replies
WHERE tickets.id = replies.ticket_id") or die(mysqli_error($db->conn));
我做错了吗?我的逻辑有问题吗?
我还想补充一点,我之前的查询有“INNER join”和“left join”,但内部给我的输出与我目前的输出相同。
有点乱,但这是查询后运行的代码。
while($rows = $ticket->fetch_object()) {
if($_SESSION['ticket_username'] == $rows->client) {
$status = $rows->status;
echo '
<h3>'.$rows->subject.'</h3>
<small>Created by '.$rows->client.', '.$timeAgo->inWords($rows->created_at).'</small>
<hr>
<p>'.nl2br($rows->message).'</p>
<hr>
<small>Reply from '.$rows->reply_username.', '.$timeAgo->inWords($rows->reply_time).'</small>
<p>'.nl2br($rows->reply_message).'</p>
<hr>
';
} else {
header("Location: index");
}
if(!empty($errors) && is_array($errors)) {
foreach($errors as $error) {
echo $error;
}
}
}
【问题讨论】:
-
查询后粘贴整个代码
-
正如@PlatinumIndustries 所说,之后我们将需要代码;您的查询将为您提供所有正确的信息。您的问题似乎在于您如何处理它。
-
对不起,我添加了查询后运行的代码