这更像是一个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']))
;}
答案 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);