SQL SUM() и ANGULAR.JS

#php #mysql #angularjs

#php #mysql #angularjs

Вопрос:

Я знаю, как подключать, отображать, удалять, добавлять данные из моей базы данных и отображать все это на моем веб-сайте. Все работает правильно. Я вижу свои результаты на своем веб-сайте и в своей базе данных. Я делаю это с помощью AngularJS, AJAX и PHP, но моя проблема в том, что я не знаю, как использовать MYSQL SUM() в одном из моих столбцов. Например, это моя таблица в mysql, и я хотел бы определить общую сумму столбца money.

 id    money

1     23

2     345

3     111
  

Это то, что я получил:

index.html:

………………

     <table class="table table-striped">
    <tr>
      <th>Money</th>
    </tr>
    <tr>
      <td>{{ wcdrates.sumMoney }}</td>
    </tr>
  </table>
  

……………..

Я не знаю, должен ли я оставить ng-repeat как есть или использовать что-то другое вместо этого. В любом случае ng-повтор dosent’work. Он показывает мне все результаты из столбца money, а не общую сумму. …………

controller.js

…………………

 $http.post('./php/showMoney.php')
  .success(function(data) {
    $scope.wcdrates = data;
  })
  .error(function(err) {
    $log.error(err);
  })
  

………………..

connectDatabase.php

 <?php
define("__HOST__", "127.0.0.1");
define("__USER__", "root");
define("__PASS__", "");
define("__BASE__", "davbaza");

class DB {
    private $con = false;
    private $data = array();

    public function __construct() {
        $this->con = new mysqli(__HOST__, __USER__, __PASS__, __BASE__);

        if(mysqli_connect_error()) {
            die("DB connection failed:" . mysqli_connect_error());
        }
    }

    public function qryPop() {
        $sql = "SELECT * FROM `wcdrates` ORDER BY `id` DESC";
        $qry = $this->con->query($sql);
        if($qry->num_rows > 0) {
            while($row = $qry->fetch_object()) {
                $this->data[] = $row;
            }
        } else {
            $this->data[] = null;
        }
        $this->con->close();
    }



    public function qryFire($sql=null) {
        if($sql == null) {
            $this->qryPop();
        } else {
            $this->con->query($sql);
            $this->qryPop();    
        }
        //$this->con->close();
        return $this->data;
    }
}
  

?>

showMoney.php

 <?php 

include('connectDatabase.php');

$db = new DB();

$sql = "SELECT SUM(money) as sumMoney FROM wcdrates";

$data = $db->qryFire();

echo json_encode($data);
  

mysql

     CREATE TABLE IF NOT EXISTS `wcdrates` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `money` int(11) NOT NULL,
  PRIMARY KEY (`id`)
)
  

Я понятия не имею, что я должен изменить, чтобы получить то, что я хочу.

Комментарии:

1. если вы используете sql SUM(money) as sumMoney , то вы также можете получить к нему доступ с помощью контроллера с именем sumMoney

2. » {{wcdrates.sumMoney}} это не сработало, я сделал, как вы сказали, но все равно ничего, есть идеи?

3. вы после этого? console.log(data) success Если у вас есть, поделитесь со мной!

4. вот что я получил: массив [ Объект, объект, объект, объект]

5. запустите это angular.forEach(data,function(d){ console.log(d) }) и посмотрите, дайте мне результат!

Ответ №1:

измените qryPop в своем коде на следующий код.

  $sql = "SELECT id,money , SUM(money) as sumMoney FROM `wcdrates` ORDER BY `id` DESC";
  

Надеюсь, вы получите ответ