2017-04-12 8 views
0

私はphpの初心者で、mysql dbテーブルの特定のカラムの集計をしようとしていますが、結果が正しくないようにこのカラムにカンマ区切りの値があります。 これは、テーブルの列のサンプルコンマでmysqlカラムの合計値

COLUMN1

12,345.67

123,456.78

COLUMN2

12,345.67

123,456.78

COLUMN3ある

12,345.67

123,456.78

column4

12,345.67

123,456.78

私はそれを使用することができますどのように解決策を使用しますならば、私の下のコードと親切にアドバイスを見つけてください。

<?php 
$query=mysql_query("select * from mytable")or die(mysql_error()); 
while($row=mysql_fetch_array($query)){ 
?> 
<tr> 
<td><?php echo $row['column1'] ?></td> 
<td><?php echo $row['column2'] ?></td> 
<td><?php echo $row['column3'] ?></td> 
<td><?php echo $row['column4'] ?></td> 
</tr> 
<?php } ?> 
</tbody> 
</table> 
<?php 
$result = mysql_query("SELECT sum(column1 + column2 + column3 + column4) FROM mytable") or die(mysql_error()); 
while ($rows = mysql_fetch_array($result)) { 
?> 
<div> 
&nbsp;Total:&nbsp;<?php echo $rows['sum(column1 + column2 + column3 + column4)']; ?></div> 
<?php } 
?> 
<?php } 
?> 
+0

あなたはPHPで二重に文字列を解析し、そこに合算を行う必要があります、MYSQLはコンマではないと思います。私は思っていません。なぜ数値を表すためにデータベース内の文字列を使用しているのか尋ねることはできますか?書式設定にコードを使用し、データを適切な形式で適切に保管します。 – nospi

+0

私はデータベースを作成せず、データを適切に保管する必要があることを知っていますが、これは一種のテストです。 私のコードであなたの解決策を説明してください。私は理解できますか? –

答えて

0

まず、私は非常にあなたのデータベース内の正しいデータ型を使用してお勧めしますが、あなたはこれが不可能である示さてきたように、最も簡単な方法はにあります文字列を既存のループのdouble値に解析し、実行中の合計を保持します。

$query=mysql_query("select * from mytable")or die(mysql_error()); 
while($row=mysql_fetch_array($query)){ 
    ... existing code ... 

    # remove the comma, and cast the string to a double 
    $col1 = (double) str_replace(",", "", $row->column1); 
    ... $col2, $col3 ... 
    $col4 = (double) str_replace(",", "", $row->column4); 

    $rowVal = $col1 + $col2 + $col3 + $col4; 

    # keep a running total 
    $totalVal += $rowVal; 
} 

次に、あなたが後でそれを必要とするとき

# format the total again as you see fit 
echo $totalVal;        // straight double 
echo number_format($totalVal, 2, '.', ','); // thousand separator and decimal point 

にあなたが適切にフォーマットされたMySQLを使用できるように、データベースの構造をクリーンアップ

を推奨。また、これらの関数(mysql_query)などは推奨されていません。準備された陳述書を見てください。

http://php.net/manual/en/book.pdo.php - 設定/ https://phpdelusions.net/pdoを参照するための良いもの - のみ適切なガイドとしての自己宣伝、そう確かに一見の価値

+0

あなたの努力に本当に感謝していますが、私は(ダブル)何かに置き換えるか、それをコピーして貼り付けてください。 –

+0

(double)を使っていることはtypecastingと呼ばれています。文字列変数をdouble型にキャストしています。私は(int)を行うことができたが、小数点以下は持たない。小数点以下の桁数を2倍にしてキャストし、上の値を使用して行の合計値を計算し、次に総計値 – nospi

0

SQLはそのように合計を割り当てません。

SELECT sum(column1 + column2 + column3 + column4) AS MYSUM FROM mytable 

エコー$行[ 'MYSUM']に

変化選択

SELECT sum(column1 + column2 + column3 + column4) FROM mytable 

+0

私は今このソリューションを試しましたが、まだ結果はありません。 –

+0

申し訳ありません '$ rows ['MYSUM']' – Forbs

1

mysqlが集計を適切に実行するためには、SELECT *を使用するのではなく合計される各フィールドを指定する必要があります。例えば

<?php $query=mysql_query("select Order_Name, SUM(ORDER_VALUE), SUM(ORDER_COUNT) SUM(ORDER_TAX+ORDER_SHIPPING AS 'fees') from mytable...

あなたのCSVソースデータにカンマの有無に基づいて、あなたはおそらく、おそらく正しいタイプであると、データベースのフィールドを設定する必要があるため、集計が機能しない場合小数点以下2桁のみを使用する場合は、FLOATまたはDOUBLEになります。

0

これはコンマでいくつかの値を追加します。

set @num1 = '222,3039'; 
set @num2 = '23,444990'; 
select REPLACE(@num1,',','')+ REPLACE(@num2,',','') 
関連する問題