计算从SQL QUERY中检索特定值的次数

时间:2012-11-16 02:16:24

标签: php mysql

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];
  };
};

一切正常,但我还要计算每个名称的重复次数(回显)。 即:马克斯的薪水最高,兄弟人数最多,所以他的名字已经被重审了2次。洛伦只有最多的孩子,所以他的名字已被重新审视过一次。杰森从来没有被重新审视过,所以对他来说是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:如果你也可以改进代码,那么我将不胜感激最大值。

更新

每个表的查询应输出:

Name salary
Max  2000

-

Name   childrens
Loren  4

-

Name   brothers
Max    3

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);