在IF语句中将ID与用户名链接

时间:2013-09-05 16:02:00

标签: php mysql hyperlink html-table username

我参与了一个正在研究的项目。但是我似乎无法让它发挥作用。

脚本相当“简单”,但我无法按照我想要的方式获得它。 我列出了一个收件箱,我可以看到我发送的邮件和收到的邮件,但这些是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。

1 个答案:

答案 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注入等其他事情。