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);
答案 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);