我正在为我的一个站点开发一个消息传递系统,但是在显示消息时遇到很多问题。由于某种原因,我无法正确使用语法,因此如果user_id与receive_id匹配,则它将显示与receive_id匹配的每个值。我在Windows测试机上可以正常运行,但是当我将其上传到ubuntu服务器时,它坏了。所以现在我正在尝试修复代码。我所拥有的是:
$m = "SELECT m.message_id, m.receiver_id, m.sender_id, m.subject, m.body, m.posted, u.id, u.username FROM messages m, users u WHERE u.id = {$_SESSION['id']}";
$b = mysqli_query($dbc, $m);
?>
<div class="mailbox">
<a href="inbox.php?id=<?php echo $_GET['id']; ?>">Inbox</a><br />
<a href="sent.php?id=<?php echo $_GET['id']; ?>">Sent</a><br />
</div>
<div class="mailbox">
<h2>Messages for <?php echo $_SESSION['username']; ?></h2>
<?php echo output_message($message); ?>
<div id="messages">
<?php
if (mysqli_num_rows($b) > 0) {
while ($mess_row = mysqli_fetch_array($b, MYSQLI_NUM)) {
$u = "SELECT * FROM users WHERE id={$mess_row[1]}";
$rec = mysqli_query($dbc, $u);
$rec_row = mysqli_fetch_array($rec, MYSQLI_NUM);
$s = "SELECT * FROM users WHERE id={$mess_row[2]}";
$send = mysqli_query($dbc, $r);
$send_row = mysqli_fetch_array($send, MYSQLI_NUM);
echo "<a href=\"received.php?id=$mess_row[0]&sender=$send_row[1]\">$mess_row[3]</a> Posted by: <b><a href=\"profile.php?id=$mess_row[2]\">$send_row[1]</a></b> on: $mess_row[5]<br /><hr />";
}
} else {
echo "No messages.";
}
我究竟做错了什么?我以为我已经把它修好了,但后来又吐出了相同的记录五次。我尝试了分组,仅给了我1条记录。我尝试将$ s调用移至while循环之外,但无法以这种方式使用发送方的user_id。我只是不知道该怎么办,在过去的几个小时中,我一直在搜索所有内容,但找不到确切的内容,否则我输入的问题不正确。
提前致谢。
最佳答案
使用JOIN在一个查询中获取所有内容:
$m = "SELECT m.message_id, m.receiver_id, m.sender_id, m.subject, m.body, m.posted, s.username sender_name, r.username receiver_name
FROM messages m
JOIN users r ON r.id = m.receiver_id
JOIN users s ON s.id = m.sender_id
WHERE u.id = {$_SESSION['id']}";
关于php - 从表中获取值并回显它们,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16826429/