我有以下代码,应该从2个表中获得一些结果,我目前正在尝试加载他们的最后一个(时间),用户ID,用户头像。
我使用以下代码在页面上显示:
<?php
$t = 1800;
$sql = 'SELECT mh_users.id, mh_users.lastactive, mh_users.avatar, mh_users.gang FROM `mh_users` ';
$sql .= 'LEFT JOIN `mh_users_stats` ON mh_users.id = mh_users_stats.id WHERE mh_users.lastactive > `'.$t.'` ORDER BY `mh_users.lastactive` DESC';
$res = $db->query($sql) or exit($db->error);
while($row = $res->fetch_object()) {
$online_user = new User($row->id);
echo '<tr>'
. '<td><img src="'.$online_user->avatar.'" width="40" height="40" alt="[avatar]" /></td>'
. '<td>'.$online_user->formattedname.'</td>'
. '<td>'.$gang_name.'</td>'
. '</tr>'
;
}
?>
看来这个查询的页面是空白的,$ db-&gt;错误没有返回任何内容,页面只是白色。
但是,如果我在此查询中执行此操作:
$sql = 'SELECT mh_users.id, mh_users.lastactive, mh_users.avatar, mh_users.gang FROM `mh_users` ';
$sql .= 'LEFT JOIN `mh_users_stats` ON mh_users.id = mh_users_stats.id';
它确实有效,但是,它在最后一个活动时间没有排序,我怎样才能使这个查询根据最后一个活动时间列出结果(因此访问最新页面的用户将显示在顶部)
对于noob问题感到抱歉,但我目前无法解决问题:(
非常感谢!
答案 0 :(得分:2)
而不是
ORDER BY `mh_users.lastactive`
你应该像这样单独使用反引号别名和字段名称
ORDER BY `mh_users`.`lastactive`
或者根本不使用反引号,因为您已经无法在查询中的任何地方使用它们。
正如我们在评论中发现的那样,您忘记在更新语句中添加WHERE条件。像$sql = 'UPDATE mh_users SET lastactive = '.time().' WHERE id='.$_SESSION['uid'];
这样的东西应该有效。
答案 1 :(得分:1)
ORDER BY `mh_users`.`lastactive`
不
ORDER BY `mh_users.lastactive`
答案 2 :(得分:0)
这应该适合你(我只是删除了变量周围的后面的滴答声):
$sql = 'SELECT mh_users.id, mh_users.lastactive, mh_users.avatar, mh_users.gang FROM `mh_users` ';
$sql .= 'LEFT JOIN `mh_users_stats` ON mh_users.id = mh_users_stats.id WHERE mh_users.lastactive > '.$t.' ORDER BY `mh_users.lastactive` DESC';