2012-11-16 6 views
0

MySQL의 테이블 이름, 급여, 어린이, 형제, 나는 연봉의 최대 값을 갖는 사람의 이름을 검색하기 위해 노력하고있어카운트

, 30 세 이상 어린이 및 형제. 참고 : 모든 이름은 고유합니다.

모든 열이 배열 오순절 통해 I 루프를 달성하려면 :

$columns = array('salary','childrens','brothers') 
foreach($columns as $value){ 
    $result=mysql_query("SELECT `name`, `$value` FROM table_name WHERE `age`>30 ORDER BY `$value` ASC LIMIT 1"); 
    while($rows=mysql_fetch_array($result,MYSQL_ASSOC)){ 
    echo $rows[name]; 
    }; 
}; 

모든 것이 잘 작동을하지만, 나는 또한 각각의 이름이 자궁강되는 시간의 양을 계산하고 싶습니다 (를 에코). 즉, Max는 가장 높은 급여와 가장 많은 양의 형제를 갖기 때문에 그의 이름은 2 회 재임명되었습니다. Loren은 가장 많은 양의 어린이만을 보유하고 있으므로 그의 이름은 1 회 다시 검색되었습니다. 제이슨은 한번도 다시 찾지 못했기 때문에 그를 0으로 만들었습니다.

$i=0; 
$columns = array('salary','childrens','brothers') 
foreach($columns as $value){ 
    $result=mysql_query("SELECT `name`, `$value` FROM table_name WHERE `age`>30 ORDER BY `$value` ASC LIMIT 1"); 
    while($rows=mysql_fetch_array($result,MYSQL_ASSOC)){ 
    echo "The person who has the max amount of $value is $rows[name]"; 
    $count[$rows[name]] = $i++; 
    }; 
}; 

그러나 그것이 최대 값을 갖는 경우를 고려하지 않고 eache 이름은 모든 컬럼에 표시되는 횟수를 계산, 의도 한대로 작동하지 않습니다 :

나는이 시도.

도움이 될 것입니다. ps : 코드를 개선하면 최대 값을 얻을 수있어서 고맙겠습니다.

UPDATE :

각 테이블에 대한 쿼리해야 출력이 :

Name salary 
Max 2000 

-

Name childrens 
Loren 4 

-

Name brothers 
Max 3 

$ count 배열은 다음과 같아야합니다 : $ count = array ('Max'=> 2, 'Loren'=> 1, 'Jason'=> 0, 'etc'=> 0);

+0

더 구체적으로 모든 기록의 가장 큰 가치를 얻을 수있는 예를 들어, 급여, 어린이의 최대 값을 갖는 사람의 이름과 형제, 나이가 30 * 이상)? –

답변

0

모든 이름에 동일한 카운터를 사용했습니다. 그들을 나누어보십시오. 뭐 그런 :

$count=array(); 
$columns = array('salary','childrens','brothers') 
foreach($columns as $value) { 
    $result=mysql_query(
     "SELECT `name`, `$value` 
     FROM table_name 
     WHERE `age`>30 
     ORDER BY `$value` ASC 
     LIMIT 1" 
    ); 
    while($rows=mysql_fetch_array($result,MYSQL_ASSOC)) { 
     echo "The person who has the max amount of $value is $rows[name]"; 
     if(!isset($count[$rows[name]])) 
      $count[$rows[name]] = 0; 
     ++$count[$rows[name]]; 
    }; 
}; 
print_r($count); 

는 UPD : 당신이 MAX의 값을 가진 행을 필요로하는 경우 또한, 대신 ASC

UPD2의 DESC을 사용해야합니다는 모든 사용자를 검색하려면, 당신은 또한 필요 SELECT DISTINCT name FROM table_name을 실행하여 이전 코드를 가져오고 배열로 가져 오십시오. $count[$r['name']] = 0

0

저는 여러분이 무엇을할지는 모르겠지만 프로그램에서 저는 가장 좋은 값을 얻기 위해 비교 방법을 사용할 것입니다. 그러나 또 다른 MAX() 함수가 있습니다. 서버 측 언어로 * (당신이 원하는 결과와 샘플 레코드를 추가 할 수 http://www.w3schools.com/sql/sql_func_max.asp

$columns = array('salary','childrens','brothers'); 
$highest = array(array('salary'=>0,'childrens'=>0,'brothers'=>0)); 

foreach($columns as $value){ 
    $result=mysql_query("SELECT `name`, `$value` FROM table_name WHERE `age`>30 ORDER BY `$value` ASC LIMIT 1"); 
    while($rows=mysql_fetch_array($result,MYSQL_ASSOC)){ 

    //compare the value of each record if greater then replace 
    if($highest[$value]<$rows[$value]){ 
    //replace with current highest value and set name into array 
    $highest[$value]=$rows[$value]; 
    $highest[$value]=$rows[name]; 
    } 
    }; 
}; 

print_r($highest);