1

わかりましたので、値の mySQL テーブルがあります。肯定的なものもあれば、否定的なものもあります。負のものには、表の前に - があります。私はコードイグナイターを使用しています。

それらをすべて合計する必要がありますが、負の値の前の - は無視してください。負の数として合計するのではなく、数値を合計したいだけです。

たとえば、これは現在の動作です: -55 + -20 = 35

しかし、私がやりたいことは次のとおりです: -55 + -20 = 75

基本的に、正または負の型に関係なく、値のみを合計したい。

これどうやってするの?これが私のクエリです:

$this->db->select_sum('vat')
     ->from('accounts')->where_in('type', 'Expenses')
     ->where('date <=', $current_period)
     ->where('date >=', $previous_period);
4

4 に答える 4

5

おそらく、次のようなものが機能します。

$this->db->select('SUM(CASE WHEN vat >= 0 THEN vat ELSE -vat END) AS sum', false)->from('accounts')->where_in('type', 'Expenses')->where('date <=', $current_period)->where('date >=', $previous_period);

これにより、正の数値が正に保持されvat、負の数値が正に変換されます。注: ステートメントのはfalseselect()CI がフィールドを自動エスケープするのを防ぎます。

また、@shubhansh からのコメントからピックアップされたように、MySQL のABS()メソッドを使用して、次の代わりに絶対値を取得できますCASE

$this->db->select('SUM(ABS(vat)) AS sum', false)->from('accounts')->where_in('type', 'Expenses')->where('date <=', $current_period)->where('date >=', $previous_period);
于 2012-08-06T13:26:08.810 に答える
0

2つの方法が考えられます。

最初の方法: CI はフィールド名をエスケープすると確信しているので、この方法で行うには、通常のクエリを実行する必要があります。

$this->db->query('SELECT SUM(AVG(vat)) FROM accounts WHERE ...'); // Replace ... with WHERE parameters 

2 番目の方法: または、2 つのクエリを実行して結果を合計します。

$positive = $this->db->select_sum('vat')->from('accounts')->where_in('type', 'Expenses')->where('date <=', $current_period)->where('date >=', $previous_period)->where('vat >=', 0);
$negative = $this->db->select_sum('vat')->from('accounts')->where_in('type', 'Expenses')->where('date <=', $current_period)->where('date >=', $previous_period)->where('vat <', 0);
$result = $positive + abs($negative);

2 番目のオプションは 2 つの別個のクエリであるため、完了するまでに時間がかかることに注意してください。

于 2012-08-06T13:29:46.993 に答える
-2

あなたはいつでも試すことができます:

where table.field NOT LIKE '%-%'
于 2014-09-18T18:10:23.660 に答える