PHP / MySQL检索每个用户的最后一个操作以制作列表

时间:2011-09-14 01:32:56

标签: php mysql

我正在开发一个动态网站,但我遇到了查询问题。我试图通过从数据库中检索日期来动态构建地图。我附上了db结构:

国家/地区(代码,名称)

data(user_id,dateaction,container)

用户(user_id,country_code)

我想显示每个国家/地区的AVG容器列表,但应根据每个用户的上一个操作计算平均值,并在当天提交数据。在任何国家的“容器”的非值的情况下,值为0.我尝试了很多查询,但我无法实现目标。我附上了一些我试过的问题。

$query = "SELECT AVG(data.container), data.user_id, users.country_code ".
"FROM data, users ".
"WHERE data.user_id = users.user_id AND dateaction >= '".date('Y-m-d').' 00:00:00'."' AND date < '".date('Y-m-d').' 23:59:59'."'".
"GROUP BY users.country_code ";

$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result)){
    $cid=$row['country_code'];
    $queryy=mysql_query("select * FROM Countries WHERE country_code='$cid'") or die("Error Occured,plz try again1");
    $rowy = mysql_fetch_array( $queryy );
    $cname=$rowy['country_name'];
    echo '<area title="'.strtoupper($cname).'" mc_name="'.strtoupper($cid).'"></area>'; }

请你帮我解决这个合乎逻辑的问题?

1 个答案:

答案 0 :(得分:1)

$query = "SELECT a.user_id, ifnull(a.country_code, 0) as country_code, avg(a.container) ".
"FROM data a INNER JOIN ".
"(SELECT data.user_id, max(dateaction) dateaction ".
"FROM data".
"WHERE dateaction >= '".date('Y-m-d').' 00:00:00'."' AND date < '".date('Y-m-d').' 23:59:59'."'".
"GROUP BY data.user_id) b ".
"ON a.user_id = b.user_id and a.date_action = b.date_action ".
"GROUP BY a.user_id, ifnull(a.country_code, 0) "
相关问题