highcharts вывод из базы данных

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: highcharts вывод из базы данных

Сообщение Artikk »

Код: Выделить всё

<?php
$categories = [
	'name' => 'Продажи за день',
	'data' => []
];
foreach($products as $product){

	$categories['data'][] = [$product['name'], $product['cnt']];
	//print_r($product['cnt']);



}

	echo Highcharts::widget([

		'options' => [
			'title' => ['text' => 'Продажи'],
			'xAxis' => [
				'categories' => $categories['data'],
			],
			'yAxis' => [
				'title' => ['text' => 'Fruit eaten']
			],
			'series' => [
				['name' => 'Товары', 'data' => [1,2,3,4]]
			]
		],
	]);


?>
сделал щас так, но не знаю, как мне преобразовать массив, чтобы

Код: Выделить всё

'series' => [
				['name' => 'Товары', 'data' => [1,2,3,4]]
			]
такой вид был.
т.е. надо вывести там количество http://c2n.me/3HRGzzn
подскажите, как преобразовать в нужный формат?
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: highcharts вывод из базы данных

Сообщение caHek2x »

вообще не понимаю что вы делаете ... вам надо в series массив ... с массивом в котором будут ключи name и дата ...
зачем вы пишите это:
'series' => $categories['data']
так разве не работает ?
'series' => [$categories]
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: highcharts вывод из базы данных

Сообщение Artikk »

по другому ничего не выводит.
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: highcharts вывод из базы данных

Сообщение Artikk »

Код: Выделить всё


<?php
$categories = [
	'name' => 'Продажи за день',
	'data' => []
];
foreach($products as $product){

	$categories['data'][] = [$product['name'], $product['cnt']];

}
	echo Highcharts::widget([

		'options' => [
			'title' => ['text' => 'Продажи'],
			'yAxis' => [
				'title' => ['text' => 'Количество']
			],
			'series' => [$categories]
		],
	]);


?>
так вообще ничего не выводит.
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: highcharts вывод из базы данных

Сообщение Artikk »

я переделал выборку так:
$prod = Stat::find()->all();

Код: Выделить всё

<?php

$categories = [
	'name' => 'Итого',
	'data' => []
];
foreach($prod as $product){
	$categories['data'][] = [$product['name'], $product['sum_item']];
}
	echo Highcharts::widget([

		'options' => [
			'title' => ['text' => 'Статистика продаж'],
			'yAxis' => [
				'title' => ['text' => 'Цена, Руб.']
			],
			'series' => [$categories]

		],
	]);
	//print_r($categories);
?>
Вот статистика: http://c2n.me/3HRVOsd
и все заработало, но вопрос, мне нужно сделать COUNT одинаковых товаров, как мне это сделать и как сделать, чтобы выводилос за определенный период, допустим за текущий месяц?
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: highcharts вывод из базы данных

Сообщение Artikk »

надо как-то count сделать без asArray, как это можно реализовать?, т.к. с asArray не работает
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: highcharts вывод из базы данных

Сообщение caHek2x »

Artikk писал(а): 2017.02.25, 10:57 т.к. с asArray не работает
глупость ... asArray ни в чем не виноват ...
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: highcharts вывод из базы данных

Сообщение Artikk »

как сделать, чтоб работало?
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: highcharts вывод из базы данных

Сообщение caHek2x »

вы делали в запросе COUNT(*) соответственно ваша вся выборка дала одну запись ... т.к. group by не указан вот оно и все в одну гребенку ... поэтому тут дело не в asArray ... вы бы хотябы продебажили что вам запрос возвращает за данные ...
сделать COUNT одинаковых товаров
сделайте group by по ид товара ... и тут уже добавляйте count в select ... тогда будет в ответе не одна запись а именно записи с
товар ид - количество ...

вы поймите одно дело помогать человеку у которого чтото не получается ... другое дело помогать человеку который не хочет даже основы поучить а просто хочет "чтоб работало" ... вы спросили конкретно как данные вставлять - вам рассказали ... вы спросили как foreach пользоваться - вам показали. Теперь запросы научить строить ... но ведь это все есть в документации, не поленитесь начните с основ php а потом уже yii ...
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: highcharts вывод из базы данных

Сообщение Artikk »

Код: Выделить всё

$prod = Stat::find()->groupBy('product_id')->select(['*', 'COUNT(*) AS cnt'])->orderBy(['id'=>SORT_ASC])->limit(20)->asArray()->all();
вот я сделал запрос.
print_r($prod) вывел:

Код: Выделить всё

Array ( [0] => Array ( [id] => 1 [order_id] => 8 [product_id] => 14 [name] => Телевизор sony33 [price] => 12500 [qty_item] => 1 [sum_item] => 12500 [cnt] => 2 ) [1] => Array ( [id] => 2 [order_id] => 8 [product_id] => 13 [name] => Телек3 [price] => 15600 [qty_item] => 1 [sum_item] => 15600 [cnt] => 3 ) [2] => Array ( [id] => 5 [order_id] => 10 [product_id] => 15 [name] => Телевизор sony333 [price] => 17800 [qty_item] => 1 [sum_item] => 17800 [cnt] => 1 ) [3] => Array ( [id] => 6 [order_id] => 11 [product_id] => 9 [name] => Телевизор sony2 [price] => 19000 [qty_item] => 5 [sum_item] => 95000 [cnt] => 1 ) ) 
но оно не работает, я не могу понять почему. про count я знаю... я не могу понять, почему не выводит оно...
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: highcharts вывод из базы данных

Сообщение Artikk »

никак не хочет работать с asArray()....
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: highcharts вывод из базы данных

Сообщение Artikk »

т.е.

Код: Выделить всё

$prod = Stat::find()->groupBy('product_id')->select(['*', 'COUNT(*) AS cnt'])->orderBy(['id'=>SORT_ASC])->limit(20)->asArray()->all();
вот что показывает:

Код: Выделить всё

Array ( [0] => Array ( [id] => 1 [order_id] => 8 [product_id] => 14 [name] => Телевизор sony33 [price] => 12500 [qty_item] => 1 [sum_item] => 12500 [cnt] => 2 ) [1] => Array ( [id] => 2 [order_id] => 8 [product_id] => 13 [name] => Телек3 [price] => 15600 [qty_item] => 1 [sum_item] => 15600 [cnt] => 3 ) [2] => Array ( [id] => 5 [order_id] => 10 [product_id] => 15 [name] => Телевизор sony333 [price] => 17800 [qty_item] => 1 [sum_item] => 17800 [cnt] => 1 ) [3] => Array ( [id] => 6 [order_id] => 11 [product_id] => 9 [name] => Телевизор sony2 [price] => 19000 [qty_item] => 5 [sum_item] => 95000 [cnt] => 1 ) ) 
но на графике не отображается....
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: highcharts вывод из базы данных

Сообщение caHek2x »

что вы засунули в $categories
и как это отправили в series ?
так: 'series' => [$categories] ?
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: highcharts вывод из базы данных

Сообщение caHek2x »

Artikk писал(а): 2017.02.25, 17:55 т.е.
вот что показывает:

Код: Выделить всё

Array ( [0] => Array ( [id] => 1 [order_id] => 8 [product_id] => 14 [name] => Телевизор sony33 [price] => 12500 [qty_item] => 1 [sum_item] => 12500 [cnt] => 2 ) [1] => Array ( [id] => 2 [order_id] => 8 [product_id] => 13 [name] => Телек3 [price] => 15600 [qty_item] => 1 [sum_item] => 15600 [cnt] => 3 ) [2] => Array ( [id] => 5 [order_id] => 10 [product_id] => 15 [name] => Телевизор sony333 [price] => 17800 [qty_item] => 1 [sum_item] => 17800 [cnt] => 1 ) [3] => Array ( [id] => 6 [order_id] => 11 [product_id] => 9 [name] => Телевизор sony2 [price] => 19000 [qty_item] => 5 [sum_item] => 95000 [cnt] => 1 ) ) 
я ваши данные ввел в ручную (через цикл у вас должен получиться точно такой же результат ...)

Код: Выделить всё

$categories =
    [
        'name' => 'Итого',
        'data' => [
            ["Телевизор sony33", 2],
            ["Телек3", 3],
            ["Телевизор sony333", 1],
            ["Телевизор sony2", 1],
        ]
    ];


echo Highcharts::widget(
    [
        'options' => [
            'title' => ['text' => 'Статистика продаж'],
            'yAxis' => [
                'title' => ['text' => 'Цена, Руб.']
            ],
            'series' => [$categories]
        ],
    ]
);
и как ни странно у меня все отобразилось ...
https://s8.hostingkartinok.com/uploads/ ... 755980.png
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: highcharts вывод из базы данных

Сообщение Artikk »

Код: Выделить всё

$prod = Stat::find()->groupBy('product_id')->select(['*', 'COUNT(*) AS cnt'])->orderBy(['id'=>SORT_ASC])->limit(20)->asArray()->all();

Код: Выделить всё

<?php

$categories = [
	'name' => 'Итого',
	'data' => []
];
foreach($prod as $prodt){
	$categories['data'][] = [$prodt['name'], $prodt['sum_item']];
}

	echo Highcharts::widget([

		'options' => [
			'title' => ['text' => 'Статистика продаж'],
			'xAxis' => [
				'categories' => $categories
			],
			'yAxis' => [
				'title' => ['text' => 'Цена, Руб.']
			],
			'series' => [$categories]

		],
	]);
	//print_r($categories);
?>
вот
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: highcharts вывод из базы данных

Сообщение Artikk »

Код: Выделить всё

$categories =
    [
        'name' => 'Итого',
        'data' => [
            ["Телевизор sony33", 2],
            ["Телек3", 3],
            ["Телевизор sony333", 1],
            ["Телевизор sony2", 1],
        ]
    ];
так и у меня показывается...

а вот при помощи этого не показывается:

Код: Выделить всё

$categories = [
	'name' => 'Итого',
	'data' => []
];
foreach($prod as $prodt){
	$categories['data'][] = [$prodt['name'], $prodt['sum_item']];
}
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: highcharts вывод из базы данных

Сообщение caHek2x »

во первых запрос у вас в переменную $prod
а в forech у вас фигурирует $prodt ... вы просто в render под другим название передали или как ?
во вторых
так и у меня показывается...
а вот при помощи этого не показывается:
это одно и тоже ... foreach у вас должен формировать такой же массив ... вы выводили что формирует foreach ? где результат ?
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: highcharts вывод из базы данных

Сообщение Artikk »

Код: Выделить всё

class StatController extends AppAdminController
{
	public function actionIndex(){
		$query = Stat::find()->groupBy('product_id');

		$countQuery = clone $query;
		$pages = new Pagination([
			'totalCount' => $countQuery->count(),
			'pageSize' => 20,
			'forcePageParam' => false,
			'pageSizeParam' => false
		]);

		$products = $query
			->offset($pages->offset)->limit($pages->limit)
			->select(['*', 'COUNT(*) AS cnt'])->orderBy(['cnt'=>SORT_DESC])->limit(20)->asArray()->all();

		$prod = Stat::find()->groupBy('product_id')->select(['*', 'COUNT(*) AS cnt'])->orderBy(['id'=>SORT_ASC])->limit(20)->asArray()->all();
		return $this->render('index', compact('products', 'prod', 'pages'));
	}
}
Вид: index.php

Код: Выделить всё

<?php

$categories = [
	'name' => 'Итого',
	'data' => []
];
foreach($prod as $prodt){
	$categories['data'][] = [$prodt['name'], $prodt['sum_item']];
}
	echo Highcharts::widget([

		'options' => [
			'title' => ['text' => 'Статистика продаж'],
			'xAxis' => [
				'categories' => $categories
			],
			'yAxis' => [
				'title' => ['text' => 'Цена, Руб.']
			],
			'series' => [$categories]

		],
	]);
	//print_r($categories);
?>
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: highcharts вывод из базы данных

Сообщение caHek2x »

caHek2x писал(а): 2017.02.25, 18:34 во первых запрос у вас в переменную $prod
а в forech у вас фигурирует $prodt ... вы просто в render под другим название передали или как ?
ой невнимательность уже моя ... да с циклом все норм .. не туда посмотрел ...
вы опять скидываете не то .. .я вас прошу после foreach вывести что в $categories ... зачем вы мне опять код виджета кидаете ?
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: highcharts вывод из базы данных

Сообщение Artikk »

Код: Выделить всё

$categories = [
	'name' => 'Итого',
	'data' => []
];
foreach($prod as $prodt){
	$categories['data'][] = [$prodt['name'], $prodt['sum_item']];
	print_r($categories);
}
print_rвывел:

Код: Выделить всё

Array ( [name] => Итого [data] => Array ( [0] => Array ( [0] => Телевизор sony33 [1] => 12500 ) ) ) Array ( [name] => Итого [data] => Array ( [0] => Array ( [0] => Телевизор sony33 [1] => 12500 ) [1] => Array ( [0] => Телек3 [1] => 15600 ) ) ) Array ( [name] => Итого [data] => Array ( [0] => Array ( [0] => Телевизор sony33 [1] => 12500 ) [1] => Array ( [0] => Телек3 [1] => 15600 ) [2] => Array ( [0] => Телевизор sony333 [1] => 17800 ) ) ) Array ( [name] => Итого [data] => Array ( [0] => Array ( [0] => Телевизор sony33 [1] => 12500 ) [1] => Array ( [0] => Телек3 [1] => 15600 ) [2] => Array ( [0] => Телевизор sony333 [1] => 17800 ) [3] => Array ( [0] => Телевизор sony2 [1] => 95000 ) ) )

Ответить