Prezentacja danych z bazy sql w formie diagramów

Cześć,

Raczkuję w temacie programowania i będę wdzięczny za wszelkie wskazówki bo dotychczas moja praca z bazami danych ograniczała się do excela.

 

Zatem problem wygląda następująco. Mam bazę z czterema kolumnami 

 

Kolumna 1 to rezultat działania (występują cztery różne rezultaty 1. nie udało się wyslac, 2. Wyslano bez problemów 3. Użytkownik opuscil proces, 4. Blad systemu) 

Kolumna 2 to są nazwy tygodni np. 35,36,37,38 tydzień itd. (w kolumnie każdy tydzień powtarza się kilkanaście razy)

Kolumna 3  to jest scenariusz i.e. Wysylka formularza

Kolumna 4 to jest Tak lub Nie.

 

 

Cel całego zadania to wizualizacja danych w postaci wykresów:

 

Wykres 1: na osi poziomej mamy numer tygodnia, na osi pionowej mamy ilość udanych lub nieudanych wysylek (czyli tak lub nie)

Wykres 2: na osi poziomej mamy numer tygodnia, na osi pionowej mamy liczby od 0-100  i na diagramie 4 linie z  konkretnymi przyczynami niepowodzenia.

Itd.

 

Jak te dane zliczyć np. w PHP? Za pomocą jakich funkcji?

 

Docelowo  oczywiście cel jest taki żeby to przedstawić w formie interaktywnego diagramu, ale już dużo mi da jak będę wiedział w jaki sposób przenieść te dane poprawnie na stronę.

 

 

Znalazlem taką biblioteke http://www.highcharts.com/docs/getting-started/installation

 

Ale zanim jej użyję muszę mieć ładne przygotowane tabele. Jeśli ktoś miał do czynieniea z podobnym zagadnieniem to proszę o pomoc.

 

Dziękuję 

 

Jeśli dobrze przygotujesz bazę to w php przekażesz tylko dane do wygenerowania.

 

Tak na szybko jak to możesz zrobić  w bazie:

http://sqlfiddle.com/#!2/c5083/5

A nie możesz tego pokazać w EXCEL-u skoro go już znasz?

Excel też może pobrać i wyświetlić te dane.

za mało informacji. Jaka baza? W jaki sposób chcesz generować wykres? jednorazowo, w prezentacji, na www, w aplikacji?

Dziękuję za odpowiedzi.

 

Czy to ma prawo zadziałać jeżeli po prostu połączę się z bazą ( w ramach jednego pliku) przez php i pozniej wstawię to co mi wypluje php czyli np pint_r ($wyniki); do skryptu JS? Poniżej przyklad. Na tę chwilę całość wygląda tak http://iwaniuk.stronazen.pl/bat/test.html

 

<?php
$connect = mysql_connect('localhost','2x2x2x','xxx');
$baza = mysql_select_db('xxx', $connect);
$zpt = 'SELECT * FROM highcharts';
$rezultat = mysql_query($zpt, $connect);
$wyniki = mysql_fetch_assoc($rezultat);
pint_r ($wyniki);
?>

 

Tzn w Php otrzymuję dane których potrzebuję, ale jak próbuję wstawić to do skryptu JS to stronka pada, więc zapewne nie jest to zgodne z zasadami. Jak to zatem obejść?

 

Próbowałem to zrobić tak:

 

 

$(function () {

chartype = ‘bar’;
chartTitle = ‘Password Registration Attempts’;
chartCategories = [‘Week 37’, ‘Week 38’, ‘Week 38’, ‘Week 40’, ‘Week 41’];
chartData = [{name: ‘Success’,data: [20, 18, 741, 942, 516]}, {name: ‘Fail’,data: [18, 13, 378, 512, 299]}];
setDynamicChart(chartype, chartTitle, chartCategories, chartData);

setDynamicChart(chartype, chartTitle, chartCategories, chartData);

$(’.option’).click(function(){
var chartype = $(this).attr(‘id’);

if(chartype == ‘data1’){
chartype = ‘bar’;
chartTitle = ‘Password Registration Attempts’;
chartCategories = [‘Week 37’, ‘Week 38’, ‘Week 38’, ‘Week 40’, ‘Week 41’]; // Probowalem to zamienic na chartCategories. ale nie dziala = [<?php pint_r ($wyniki); ',') ?>];
chartData = [{name: ‘Success’,data: [20, 18, 741, 942, 516]}, {name: ‘Fail’,data: [18, 13, 378, 512, 299]}];
setDynamicChart(chartype, chartTitle, chartCategories, chartData);
}else if(chartype == ‘data2’){
chartype = ‘line’;
chartTitle = ‘Password Registration Fail Reasons’;
chartCategories = [‘Week 37’, ‘Week 38’, ‘Week 38’, ‘Week 40’, ‘Week 41’];
chartData = [{name: ‘Failed: System error’, data: [null, null, 1, 2, null]}, {name: ‘Failed: User abandoned the process’, data: [16, 13, 263, 377, 236]}, {name: ‘Failed: User provided incorrect answers’, data: [null, null, 114, 133, 63]}];
setDynamicChart(chartype, chartTitle, chartCategories, chartData);
}else if(chartype == ‘data3’){
chartype = ‘column’;
chartTitle = ‘Password Reset Attempts’;
chartCategories = [‘Week 33’, ‘Week 34’, ‘Week 35’, ‘Week 36’, ‘Week 37’, ‘Week 38’, ‘Week 39’, ‘Week 40’, ‘Week 41’];
chartData = [{name: ‘Yes’,data: [0, 0, 0, 0, 1, 8, 9, 18, 19]}, {name: ‘No’,data: [1, 13, 35, 4, 22, 51, 78, 124, 144]}];
setDynamicChart(chartype, chartTitle, chartCategories, chartData);
}else if(chartype == ‘data4’){
chartype = ‘line’;
chartTitle = ‘Password Reset Attempts’;
chartCategories = [‘Week 33’, ‘Week 34’, ‘Week 35’, ‘Week 36’, ‘Week 37’, ‘Week 38’, ‘Week 39’, ‘Week 40’, ‘Week 41’];
chartData = [{name: ‘Failed: System error’, data: [null, 2, null, null, 2, 6, 8, 16, 22]}, {name: ‘Failed: User had to many retries’, data: [null, null, null, null, 3, 12, 8, 31, 13]}, {name: ‘Failed: User provided incorrect answers’, data: [null, null, null, null, 4, 13, 15, 19, 17]}, {name: ‘Failed: User abandoned the process’, data: [1, 11, 6, 4, 8, 18, 17, 28, 47]}, {name: ‘Failed: User is not registered or entitled to use the system’, data: [null, null, null, null, 1, 2, 26, 28, 43]}];
setDynamicChart(chartype, chartTitle, chartCategories, chartData);
}
});

function setDynamicChart(chartype, chartTitle, chartCategories, chartData){
$(’#container’).highcharts({
chart: {
type: chartype
},
title: {
text: chartTitle
},
xAxis: {
categories: chartCategories
},
yAxis: {
min: 0,
title: {
text: ‘Value’
}
},
plotOptions: {
//this need only for pie chart
pie: {
allowPointSelect: true,
cursor: ‘pointer’
}
},
series: chartData
});
}
});

ja nic nie rozumiem z tego kogu który wkleiłeś natomiast domyślam się, że działa ci wszystko kiedy na sztywno podajesz JS wartości a nie potrafisz ich pobrać z SQL

 

tutaj masz przykład jak to zrobić z PHP i MySQL

 

http://www.highcharts.com/docs/working-with-data/preprocessing-data-from-a-database

 

i tak to trzeba generować.

 

niestety nie mam mysql pod ręką ale pokażę ci na sqlite jak to wygląda

 

mam prostą baze danych gdzie gromadzę jakieś wartości w kolumnach o nazwach TRUE I FALSE

 

CREATE TABLE wyniki (TRUE int, FALSE int)

<?php
$db = new SQLite3('data.db');

$results = $db->query('SELECT sum(TRUE) as T, sum(FALSE) as F FROM wyniki');

$row = $results->fetchArray();

echo $row['T']." ".$row['F'];
?>

oczywiście Ty zapytanie będziesz miał bardziej skomplikowane, musisz mieć daty, na podstawie dat wyciągnąć dane z konkretnych tygodni itp i zakładając, że wynikiem będzie prosta tablica jak w moim przypadku to echo wyświetli nam wyniki zapytania - powinniśmy zgodnie z zapytaniem dostać zsumowane wyniki z dwoch kolumn. Dane już mamy.

 

teraz wstawiamy to do JS

var chart = new Highcharts.Chart({
      chart: {
         renderTo: 'container'
      },
      series: [{
         data: [<?php echo $row['T'].",".$row['F']; ?>]
      }]
});

ja oczywiście tego nie sprawdzałem bo nie będę specjalnie highchart pobieral ale tej konwencji możesz sie trzymać. Zależy co chcesz osiągnąć…