Как посчитать, сколько строк содержат определенное значение

Я пытаюсь подсчитать, сколько «возвращенных» имеет значение «1» в месяц. Это то, что у меня так далеко:

$data1y=array();
$data2y=array();

$months_sql = array();for ($i = 1; $i <= 12; $i++) {
$months_sql[] = date("F", strtotime( date( 'Y-m-01' )." -$i months"));
}$sql = "SELECT returned, MONTHNAME( date_in) AS date_in
FROM item
WHERE  date_in >= NOW() - INTERVAL 1 YEAR";

$query = mysql_query($sql);foreach($months_sql as $month)
{
while ($row = mysql_fetch_array($query))
{
if($row['date_in'] = $month && $row['returned']=='1')
{
$counter_returned++;
}
$counter_total++;
}
$data1y[] = $counter_returned++;
$data2y[] = $counter_total++;;
}

То, что я хочу, это хранить в двух массивах, сколько записей в общей сложности на один месяц и сколько из них содержат 1 в месяц.

-1

Решение

Ваши петли глючат. Вы будете проверять только первый месяц в массиве months_sql (ноябрь, я думаю?). В течение следующего месяца у вас больше не будет результатов поиска в БД.

Вам нужно поменять их, и если вы это сделаете, ваши счетчики должны определить, к какому месяцу они относятся, потому что ваши данные БД не будут обрабатываться в месяц:

while ($row = mysql_fetch_array($query))
{
foreach($months_sql as $month)
{
if($row['date_in'] == $month)
{
if($row['returned']=='1')
{
$data1y[$month]++;
}
$data2y[$month]++;
}
}
}

Более быстрый способ сделать это с помощью count ()

$sql = "SELECT MONTHNAME( date_in) AS date_in, returned, count(*) as count
FROM item
WHERE  date_in >= NOW() - INTERVAL 1 YEAR
GROUP BY date_in, returned;";
$query = mysql_query($sql);

while ($row = mysql_fetch_array($query))
{
if(in_array($row['date_in'], $months_sql))
{
if($row['returned']=='1')
{
$data1y[$month] = $row['count'];
}
$data2y[$month] += $row['count'];
}
}

В любом случае, если вы хотите инициализировать ваши данные с 0 для каждого месяца, добавьте это перед вашим запросом БД:

foreach($months_sql as $month){
$data1y[$month]=0;
$data2y[$month]=0;
}
-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]