У меня простая таблица в БД:
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 из моей таблицы:
Так, например, октябрь 2014 года имел 1 отрицательный и 2 нейтральных отзыва.
Я хотел бы сохранить результаты в массиве.
Какие-либо предложения?
Благодарю!
Я надеюсь, что это не убийство! Но я подготовил несколько классов, чтобы помочь вам справиться с вашей проблемой таким образом, чтобы код был повторно использован.
в том же каталоге у меня есть следующие файлы
/***********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);
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));