我参与了一个正在研究的项目。但是我似乎无法让它发挥作用。
脚本相当“简单”,但我无法按照我想要的方式获得它。 我列出了一个收件箱,我可以看到我发送的邮件和收到的邮件,但这些是ID而不是用户名,我想将ID链接到另一个表中的用户名。
所以,假设我是ID 42用户名= Moominen
接收者是ID 50 username = turtle
TABLE消息
sent_to|sent_by|message|sent_time
42 | 50 | .... | .....
50 | 42 | .... | .....
TABLE成员
Memberid|Username|profilepic|
42 |moominen|img.png |
50 |turtle |turtle.png|
所以除了改变SQL查询的IF语句之外,我几乎所有工作都在工作。
$querysent = "SELECT * FROM messages WHERE (sent_by=".$logged." or sent_to=".$logged.") ORDER BY sent_time desc";
$sqlsent = mysqli_query($dbc,$querysent) or die(mysqli_error($dbc));
echo '<h3>Messages</h3>';
while($fetchsent = mysqli_fetch_array($sqlsent)) {
if ($fetchsent["sent_by"] == $logged) {
$query = "SELECT Memberid, Username, profilepic FROM members WHERE Memberid=$logged LIMIT 1";
} else {
$query = "SELECT Memberid, Username, profilepic FROM members WHERE Memberid=".$fetchsent["sent_by"]." LIMIT 1";
}
$sql = mysqli_query($dbc,$query) or die(mysqli_error($dbc));
$fetch = mysqli_fetch_assoc($sql) or die(mysqli_error($dbc));
echo '<table class="table-condensed">
<th>Sent by</th><th>Sent To</th><th>Message</th><th>Time</th>';
echo ('<tr><td><a href="index.php?page=profile&id='.$fetchsent["sent_by"].'">'.$fetch["Username"].'</a></td>
<td><a href="index.php?page=profile&id='.$fetchsent["sent_to"].'">'.$fetch["Username"].'</td>
<td>'.$fetchsent["message"].'</td>
<td><abbr class="postdate" title="'.$fetchsent["sent_time"].'"></a></td>
');
echo ('</tr>');
echo '</table>';
}
问题是我无法将用户名链接到表格中的相应ID。
答案 0 :(得分:0)
您最好使用INNER JOIN
- 这将返回两组表中匹配的所有字段。如果您想获取messages
中的所有结果,即使members
表中没有匹配的结果,也可以使用LEFT JOIN
。
以下是您更改查询的方式:
$querysent = "SELECT * FROM messages WHERE (sent_by=".$logged." or sent_to=".$logged.") ORDER BY sent_time desc";
会改为:
$querysent =
"SELECT m.*, mm.Memberid as Memberid_from, mm.Username as Username_from, mm.profilepic as profilepic_from, mmm.Memberid as Memberid_to, mmm.Username as Username_to, mmm.profilepic as profilepic_to
FROM messages m
INNER JOIN members mm ON mm.Memberid=m.sent_by
INNER JOIN members mmm ON mmm.Memberid=m.sent_to
WHERE (m.sent_by=".$logged." or m.sent_to=".$logged.") ORDER BY m.sent_time desc";
您现在应该使用$fetchsent["Username_from"]
来获取sent_by和$fetchsent["Username_to"]
以获取sent_to
如果您想了解有关JOINS的更多信息,请查看相关文档: http://dev.mysql.com/doc/refman/5.0/en/join.html
旁注 我强烈建议切换到PDO - 准备好的语句将保护您免受SQL注入等其他事情。