我有用户列表,我有选择框来过滤用户列表其中一个选择框选项显示最多,所以我也需要用户信息。 我想根据用户列表中查看次数最多的个人资料对用户进行排序。 我有这两个表但我不知道如何正确的查询来实现这一点。 我使用这样的分组:
$sql ="select userid , count(*) form profile_visit group by userid " ;
但这对我没有意义,我认为这个查询根本不会对我有所帮助。
+-----------+---------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------------+------+-----+-------------------+----------------+
| userid | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(128) | NO | | NULL | |
| password | char(40) | NO | | NULL | |
| email | varchar(128) | NO | | NULL | |
| name | varchar(256) | NO | | NULL | |
| lastname | varchar(256) | NO | | NULL | |
| job | varchar(256) | NO | | NULL | |
| birthdate | varchar(100) | NO | | NULL | |
| address | varchar(1024) | NO | | NULL | |
| website | varchar(100) | NO | | NULL | |
| tel | varchar(100) | NO | | NULL | |
| role | tinyint(1) | NO | | 0 | |
| reg_date | timestamp | NO | | CURRENT_TIMESTAMP | |
+-----------+---------------+------+-----+-------------------+----------------+
和profile_visit表一样
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| ip_address | varchar(70) | NO | | NULL | |
| userid | int(11) | NO | | NULL | |
+------------+-------------+------+-----+---------+----------------+
答案 0 :(得分:1)
尝试这样的事情:
$sql ="SELECT userid , COUNT(*) AS visits FROM profile_visit GROUP BY userid ORDER BY visits DESC" ;
这应按照您的预期进行分组,但会根据他们的访问次数按降序排列结果。
我会问是否有必要单独一张桌子?您是否需要存储所有访问的详细信息,或者您是否可以为每个用户增加“访问”整数?
答案 1 :(得分:0)
忽略 form
from
中的拼写错误,您的查询看起来合情合理。它应该为您提供配置文件标识符及其视图计数。
正如我理解你的问题,你只需要按降序排序数据,这可以通过在查询中添加order by
来实现(使用聚合列的别名使其更容易阅读):
select userid , count(*) as visitcount
from profile_visit
group by userid
order by visitcount