我有一個約100列的MySQL表。所有列都是INT。我希望能夠通過ID選擇一行,並將所有列的總數加在一起。MySQL - 跨多列添加行總數
有兩個額外的考慮。字段標題差別很大,所以我希望能夠通過引用字段號而不是字段標題來使其起作用。
最後,我想可能能夠指定一個範圍,例如,通過現場76加總場35的其中id = 50
有沒有辦法做到這一點?非常感謝你!
我有一個約100列的MySQL表。所有列都是INT。我希望能夠通過ID選擇一行,並將所有列的總數加在一起。MySQL - 跨多列添加行總數
有兩個額外的考慮。字段標題差別很大,所以我希望能夠通過引用字段號而不是字段標題來使其起作用。
最後,我想可能能夠指定一個範圍,例如,通過現場76加總場35的其中id = 50
有沒有辦法做到這一點?非常感謝你!
您需要動態地構建查詢。
首先你需要列名(你也可以自動檢索它們,但需要額外的查詢)。最好的辦法是把它們放在一個數組:[?單行的和值]
$Fields = array(
'id', 'fld2', 'fld3', ..., 'fld99'
);
function getSumField($from, $to, $allow_null = False)
{
GLOBAL $Fields;
$a_sum = array();
for($i = $from; $i <= $to; $i++)
{
if ($allow_null)
$a_sum[] = "COALESCE({$Fields[$i]},0)";
else
$a_sum[] = $Fields[$i];
}
return '('.implode('+', $a_sum).')';
}
// So we want: sum of fields 17-42 of the ONE ROW where ID = 5
$fld = getSumField(17, 42);
$SQL = "SELECT $fld FROM tbl WHERE id = 5;";
// Sum of same, in rows with ids from 7 to 22
$SQL = "SELECT SUM($fld) AS total FROM tbl WHERE id BETWEEN 7 AND 22;";
你可以使用info_schema列的列表:
select * from information_schema.columns where table_name='table'
使用,你可以建立列的陣列中,使您的查詢,值相加。它不是一個「一步」的過程,但它就足夠了。
這個答案應該是有幫助的(http://stackoverflow.com/a/2179259/1297603) – Yaroslav
你能重構你的架構?其他方面,您將需要在查詢中使用每個字段名稱。 – RedFilter
謝謝你們的指導,看起來像我可能不得不採取風景秀麗的路線,並將其全部手工堵塞。 – Brandon