重新排序php

时间:2015-10-08 20:55:59

标签: php mysql

这更像是一个php问题而不是sql。

我有一个这样的数据库:

A B C D E
1 1
1 1 1
1       1

我需要订购它但不使用ORDER BY因为所需的参数不在表格内。我需要这些数字中的几个“1”。

如果我的要求需要字段A,B,C。那么第二行的结果是3,第一行是2,第三行是1.

但是如果我的要求改为例如只包括字段E,则第三行为“1”而另一行为0。

所以我需要对这些值进行评价,如下所示:

while($row = $result->fetch_assoc()) {
$ranking = $row['A'] + $row['B'] + $row['C'] + $row['D']
;}

我想我现在需要在$ result矩阵中插入这个新的$ ranking值,然后使用该列对其进行排序并再次制动......但这超出了我对php的理解?

请问有什么亮点吗?

编辑1:

我可以这样做吗?

while($row = $result->fetch_assoc()) {
$result = array("$row['A']" => ($row['A'] + $row['B'] + $row['C'] + $row['D']))
;}

1 个答案:

答案 0 :(得分:1)

考虑一个简单的选择查询,如果选定的列经常更改,则PHP动态构建和字符串。使用计算列来满足您的其他应用需求。

SQL(sqlfiddle

SELECT IFNULL(`A`, 0) + IFNULL(`B`, 0) + IFNULL(`C`,0) As ColsSum
FROM matrix;

PHP

$cols = array('A', 'B', 'C', 'D', 'E');
$selected = array('A', 'B', 'C');

$colsSQL = "";
$results = array_intersect($cols, $selected);

foreach ($results as $a) {
    $colsSQL .= 'IFNULL(`'. $a .'`,0) + ';
}
$colsSQL = substr($colsSQL, 0, -2);

$strSQL = "SELECT ". $colsSQL ." As ColSums FROM matrix;";

...

mysqli_query($conn, $strSQL);