0

MySQL 表:姓名、薪水、子女、兄弟、年龄

我正在尝试检索年龄> 30 的薪水,子女和兄弟中具有最大值的人的姓名。注意:每个名称都是唯一的。

为了实现这一点,我遍历了这个数组的所有列:

$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 次。Jason 从未被召回,所以对他来说是 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++;
  };
};

但它没有按预期工作,它计算每个名称出现在每列中的次数,而不考虑它是否具有最大值。

任何帮助都将不胜感激。ps:如果您也可以改进代码以检索最大值,我将不胜感激。

更新:

每个表的查询应输出以下内容:

Name salary
Max  2000

--

Name   childrens
Loren  4

--

Name   brothers
Max    3

$count 数组应该是: $count = array('Max'=>2,'Loren'=>1,'Jason'=>0,'etc'=>0);

4

2 回答 2

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);
于 2012-11-16T02:38:57.270 回答
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 值的行,则必须使用DESC而不是ASC

UPD2:要检索所有用户,您还需要SELECT DISTINCT name FROM table_name在之前的代码之前执行并将其提取到数组中$count[$r['name']] = 0

于 2012-11-16T02:26:39.410 回答