Подсчитайте количество отрицательных отзывов за каждый месяц и поместите в массив

0

У меня простая таблица в БД:

id	date			feedback
0	2014–10-25		0
1	2014–10-28		1
1	2014–10-29		1
2	2014–11-14		1
3	2014–11-18		0
4	2015–01-10		2
5	2015–01-18		1

Я пытаюсь выяснить, как я могу собрать следующую информацию с PHP из моей таблицы:

  1. общее количество результатов обратной связи для 0, 1, 2 (0 является отрицательным, 1 нейтральным, 2 постов) за каждый месяц.

Так, например, октябрь 2014 года имел 1 отрицательный и 2 нейтральных отзыва.

Я хотел бы сохранить результаты в массиве.

Какие-либо предложения?

Благодарю!

Теги:
arrays
mysqli

2 ответа

0

Я надеюсь, что это не убийство! Но я подготовил несколько классов, чтобы помочь вам справиться с вашей проблемой таким образом, чтобы код был повторно использован.

в том же каталоге у меня есть следующие файлы

  1. constants.php
  2. db.php
  3. review.php

/***********constants.php*************/

define('USER','root');
define('HOST','localhost');
define('DBNAME','dbsupd');
define('PASS','');

define('NEGATIVE',0);
define('NEUTRAL',1);
define('POSITIVE',2);

/***********db.php*************/

require_once("constants.php");

class dbMySql
{
    protected $_connection;

    function __construct()
    {
        $this->openConnection();
    }

    public function openConnection()
    {
        try
        {       
            $this->connection = new PDO('mysql:host=' .HOST.';'.'dbname='.DBNAME,USER,PASS);
        }
        catch(PDOexception $e)
        {
            $this->_connection = NULL;
            echo("error: ".$e->getMessage());
            die();
        }
    }

    public function doQueryPreReturn($queryIn, array $Params)
    {
        if (isset($this->connection))
        {
            $stmt = $this->connection->prepare($queryIn);

            $stmt->execute($Params);

            $resultSet = $stmt->fetchAll();

            return $resultSet;
        }
    }
}

/************************review.php********************** *****/

class Review extends dbMySql
{
    function __construct()
    {
        parent::__construct();
    }

    public function getReviewByType($type)
    {
        $query = "SELECT id,date,feedback FROM review where feedback = ?"; // not comfortable with the column named "date" though
        $param = array();

        $param = $this->getParamByType($type);

        $review = $this->doQueryPreReturn($query,$param);

        return $review;
    }

    public function getReviewCountByType($type)
    {
        $query = "SELECT COUNT(*) FROM review where feedback = ?"; 
        $param = array();

        $param = $this->getParamByType($type);

        $review = $this->doQueryPreReturn($query,$param);

        return $review;
    }

    private function getParamByType($type)
    {
        $param = array();

        switch($type)
        {
            case NEGATIVE:
                return array(NEGATIVE);
            case NEUTRAL:
                return array(NEUTRAL);
            case POSITIVE:
                return array(POSITIVE);
        }
    }
}

Теперь вы можете использовать эти классы из отдельного файла, например

require_once("constants.php");
require_once("db.php");
require_once("review.php");

$reviewInst = new Review();

// get all neutral reviews
$neutralRev = $reviewInst->getReviewByType(NEGATIVE);

print_r($neutralRev);

// get count of neutral reviews 

$count = $reviewInst->getReviewCountByType(NEGATIVE);
print_r($neutralRev);
0
select date_format(date, '%b %Y'), 
case feedback when 0 then 'negative' when 1 then 'neutral' when 2 then 'positive' end case, 
count(feedback) 

from your_table 

group by date_format(date, '%b %Y'), feedback

Используйте этот запрос и в своей выборке (используя PDO) выполните следующее:

fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP)

Использование PDO:

$ sth = $dbh-> prepare ("select date_format (date, '% b% Y'), обратная связь с случаем, когда 0, тогда" отрицательный ", когда 1, затем" нейтральный ", когда 2, а затем положительный конец, ");

$sth-> Execute();/* Значения групп по первому столбцу */
var_dump ($sth-> fetchAll (PDO :: FETCH_COLUMN | PDO :: FETCH_GROUP));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню