从表中获取数据!

时间:2010-04-11 11:26:34

标签: sql mysql

我有用户列表,我有选择框来过滤用户列表其中一个选择框选项显示最多,所以我也需要用户信息。 我想根据用户列表中查看次数最多的个人资料对用户进行排序。 我有这两个表但我不知道如何正确的查询来实现这一点。 我使用这样的分组:

$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    |                |
+------------+-------------+------+-----+---------+----------------+

2 个答案:

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