如何使用PHP使用max()获取整行

时间:2016-07-01 04:37:40

标签: php mysql

我正在使用PHP来计算MySQL中值的总和,并且能够获得最高的$total值。

我的SQL表是

USER 1
crit_1 = 75
crit_2 = 75
USER 2
crit_1 = 100
crit_2 = 100

我的PHP是这样的:

$crit_1 = $row["crit_1"];
$crit_2 = $row["crit_2"];
$sum = ($crit_1 + $crit_2);
$total = number_format ($sum / 2, 2, '.',' ');
$totals[] = $total;
$value = max($totals);

这是我的HTML

<th><strong>Score from Crit_1</strong></th>
<th><strong>Score from Crit_2</strong></th>
<th><strong>TOTAL SCORE OF crit_1 and crit_2</strong></th>

<td align="center"><?php echo $crit_1; ?></td>
<td align="center"><?php echo $crit_2; ?></td>
<td align="center"><?php echo $total; ?></td>

并回应

<?php echo $value; ?>

这仅与数字相呼应。我想做的是如何才能获得最高价值的整行分数(从crit_1到total)。

4 个答案:

答案 0 :(得分:0)

$value = max($totals);回显相同值的原因是,在代码示例中,您只为$ totals数组分配了1个值。

$totals = array();
$totals[] =$row['crit1'];
$totals[] = $row['crit2'];
$value = max($totals);

应该给出总数数组中的最大值。然后你需要用它做点什么......

不确定为什么要除以2?平均? $total = number_format ($sum / 2, 2, '.',' '); ???

请参阅max()的文档 http://php.net/manual/en/function.max.php

我还建议查看MySQL SUM和GROUPBY函数 http://www.w3schools.com/sql/sql_func_sum.asp http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html

答案 1 :(得分:0)

在sql下面只会给出总数最高的行:

SELECT (u.crit_1 + u.crit_2) / 2 AS total, max((u.crit_1 + crit_2) / 2), u.* FROM users AS u;

但如果您想要获取所有包含总计的行,您可以执行以下操作:

SELECT (u.crit_1 + u.crit_2) / 2 AS total, u.* FROM users AS u

但是你无法在这里得到最大值。但是在示例代码中,您已在表中显示所有数据,在其他位置显示最大值。因此,通过循环可以以相同的方式打印表格中的所有数据,此时您可以检查最大总数。

$value = -1;        // outside of your loop
$value = max($value, $total);   //inside your loop

注意:使用实际的表名更改users

答案 2 :(得分:0)

我假设你有一个类似

的数据库结构
user_id , crit_1, crit_2 in which user_id is unique field, or whatever you have as unique field for each user.

然后在$ max_total数组中添加该字段,如

    <?php
    $max_total = array();
    $conn = mysqli_connect($servername, $username, $password) or die ("Connection failed: " . mysqli_connect_error());
    mysqli_select_db($conn,$mysql_database) or die("Opps some thing went wrong");
    $result =  mysqli_query($conn, "select * from reg")or die("error");
    echo '<table border="1">';
    echo '<tr><th><strong>Score from Crit_1</strong></th>
    <th><strong>Score from Crit_2</strong></th>
    <th><strong>TOTAL SCORE OF crit_1 and crit_2</strong></th></tr>';
    while($row = mysqli_fetch_assoc($result)){
        $max_total[$row['user_id']] = $row['crit_1'] + $row['crit_2'];
        echo '<tr><td align="center">'.$row['crit_1'].'</td><td align="center">'.$row['crit_2'].'</td><td align="center">'.($row['crit_1'] + $row['crit_2']).'</td></tr>';
        }
    echo '</table>';
   // echo(max($max_total));

$new = array_flip($max_total);
echo $id = $new[max($max_total)];

$id只是您的unique field使用,并在此wherecondition所需行中使用query fetch运行查询< / p>

请从这里http://php.net/manual/en/function.array-flip.php了解array_filp

答案 3 :(得分:0)

的MySQL&GT; SELECT *,(crit_1 + crit_2)AS总测试顺序按总desc限制1; + -------- + -------- + -------- + ------- ------- + + | userid | crit_1 | crit_2 |总计|总计| + -------- + -------- + -------- + ------- ------- + + | 2 | 100 | 100 | 0 | 200 | + -------- + -------- + -------- + ------- + ------- +

+ -------- + -------- + -------- + ------- + ------- + | userid | crit_1 | crit_2 |总计|总计| + -------- + -------- + -------- + ------- ------- + + | 1 | 75 | 75 | 0 | 150 | | 2 | 100 | 100 | 0 | 200 | + -------- + -------- + -------- + ------- + ------- +