2011-09-14 2 views
1

동적 웹 사이트를 개발하고 있지만 쿼리에 문제가 있습니다. 데이터베이스에서 날짜를 검색하여 동적으로 맵을 작성하려고합니다. 나는 DB 구조 묶PHP/MySQL 각 사용자의 마지막 작업을 검색하여 목록 만들기

국가 (코드 명)

데이터 (USER_ID, dateaction, 용기)

사용자 (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
$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) " 
+0

즉답 답장을 보내 주셔서 감사합니다. 실제로 표시하고자하는 목록은 다음과 같습니다. Andorra 0 (아무도 제출하지 않은 경우) 아랍 에미리트 15 (사용자로부터 오늘 제출 한 행의 평균 값입니다. 각 사용자로부터 최종 제출 만 계산됩니다 그래서 첫 번째 사용자는 제출 : 14,16,20 및 두 번째 사용 : 8,10. 평균 20 및 10,이 나라에서 각 사용자의 마지막 제출의 평균 계산)입니다. 어떻게 표시 할 수 있습니까? 이전 쿼리가이 실행을 수행합니까? – zuperakos

+0

게시 한 쿼리를 시도했지만 "네이티브 함수 'isnull'"에 대한 호출에서 잘못된 매개 변수 개수가 발생했습니다 .../ – zuperakos

+0

미안 해요, 내 두뇌는 MSSQL 모드였습니다. 그것은 MySQL에서 IFNULL입니다. 코드를 편집하다 –

관련 문제