PHP查询不起作用

时间:2014-06-10 21:24:41

标签: php mysql sql

我有以下代码,应该从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问题感到抱歉,但我目前无法解决问题:(

非常感谢!

3 个答案:

答案 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';