2016-07-16 3 views
0

пытаюсь придумать результат JSON, показываяВычислить количество строк, где год равен дате в MySQL - JSON

`[{"Year":"2014-07","Numb":4},{"Year":"2015-07","Numb":12},{"Year":"2016-07","Numb":56}]` 

«Numb» равно числу строк появившегося год. Таким образом, пример выше будет 4 строки, где появится 2014, 12 строк, где появляется 2015, и 56 строк, где появляется 2016.

Оттуда данные помещаются в диаграмму Морриса. EG Количество клиентов, которые присоединились к ГГГГ. (Месяцы используются только для оси X на диаграмме Морриса).

Am в настоящее время работает с

$query = "SELECT * FROM signup ORDER BY DateAdded ASC LIMIT 0, 24"; 
$result = mysqli_query($mysqli,$query); 

$total_rows = $result->num_rows; // Show ALL rows regardless of date. Used in Array below 

$array = array(); 
while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) 
{ 
    $date = $row['DateAdded']; 
    $time=strtotime($date); 
    $year=date("Y-m",$time); 
    array_push($array,array('Year'=>$year,'Numb'=>$total_rows)); 

} 

echo json_encode($array); 

В настоящее время работает нормально в Morris Chart, за исключением, конечно, количество строк, все равно.

Кажется довольно сложным вопросом, который из моей лиги.

Я исследовал использование COUNT, но не может видеть, как она обрабатывает несколько запросов в одном запросе ...

+1

Рассмотрит обеспечение надлежащего создания и вставка заявлений и желаемый результат – Strawberry

+0

я не понимаю, цели LIMIT в приведенном выше – Strawberry

+0

LIMIT был пережитком тестирования - вы можете игнорировать .. – Fraser4655

ответ

0

Я не имею таблицу MySQL, так что я не могу проверить его ... Пожалуйста, проверьте его и скажите мне, если он работает для вас ...

$query = "SELECT * FROM signup ORDER BY DateAdded ASC LIMIT 0, 24"; 
$result = mysqli_query($mysqli,$query); 

$total_rows = $result->num_rows; // Show ALL rows regardless of date. Used in Array below 

$array = array(); 

function in_array_r($needle, $haystack, $strict = false) { 
    foreach ($haystack as $key=>$item) { 
     if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) { 
      return $key; 
     } 
    } 

    return false; 
} 

while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) 
{ 
    $year = date("Y-m",strtotime($row['DateAdded'])); 
    $key = in_array_r($year, $array); 
    if($key !== false): 
     $array[$key]["Numb"] += 1; 
    else: 
     $array[] = array("Year"=>$year,"Numb"=>1); 
    endif; 
} 

echo json_encode($array); 
+0

Thx Praveen - Проверил и просто получить [] result .... – Fraser4655

+0

Пожалуйста, отлаживайте это самостоятельно или укажите sql где-нибудь, чтобы я мог проверить ... используйте 'echo' и' die' и 'print_r' для тестирования ... –

+0

Thx Praveen, отлаживая сейчас .. БД ничего особенного, я просто использую один столбец «DateAdded», который является отметкой времени ... – Fraser4655

0

создавал еще один Моррис Bar Chart, используя простой запрос, чтобы подсчитать, сколько было подписано до определенного уровня членства.

Использовал этот запрос в качестве альтернативы отвечу @ Правеена, чтобы придумать (для тестирования) ниже.

$array = array(); 
foreach($mysqli->query('SELECT DateAdded, COUNT(*) 
FROM signup 
WHERE CLientStatus REGEXP "Active" 
GROUP BY DateAdded') as $row) { 
$year = date("Y-m-d",strtotime($row['DateAdded'])); 
array_push($array,array('Year'=>$year, 'Numb'=>$row['COUNT(*)']); 
} 

echo json_encode($array); 

В то время как это производит Y-M-D вместо исходного Y-м, то не кажется большой разницы в конечном результате. (кроме более кратким)

Это альтернативное «решение» лучше/хуже/безопасно?

Смежные вопросы