Highstock Γραφήματα

Χαίρεται σε όλους μετά από καιρό πάλι!!

Θα περιγράψω το πρόβλημα όσο πιο συνοπτικά και περιεκτικά γίνεται. Έχω έναν πίνακα (ΌΓΚΟΙ) που για κάθε όγκο που εξορύσσεται κρατείται η Ημ/νία στο αντίστοιχο πεδίο. Θέλω να βγάλω σε διάγραμμα Highstock την ημερήσια παραγωγή όγκων. Ο κώδικας ενός διαγράμματος Highstock χρησιμοποιώντας το extension που διαθέτει το Yii είναι:


$this->Widget('ext.highstock.HighstockWidget', array(

  'options'=>array(

    'theme'=>'grid',

    'rangeSelector'=>array('selected'=>1),

    'title'=>array('text'=>'USD to EUR exchange rate'),

    'xAxis'=>array('maxZoom'=>14 * 24 * 3600000 ),

    'yAxis'=>array('title'=>array('text'=>'Exchange rate')),

    'series'=>array(array('name'=>'USD to EUR','data'=>'js:usdeur')),

  )));

Yii::app()->clientscript->registerScript('highstock',"

var usdeur = [

[Date.UTC(2003,8,24),0.8709],

[Date.UTC(2003,8,25),0.872],

[Date.UTC(2003,8,26),0.8714],

[Date.UTC(2011,4,10),0.6945]

];

",CClientScript::POS_HEAD);

Προφανέστατα πρέπει να δημιουργήσω ζεύγη τιμών (Ημ/νιας και παραγωγής). Κολλάω,όμως, στην εισαγωγή των επιστρεφόμενων δεδομένων (από το κατάλληλο SQL ερώτημα που είναι

[sql]SELECT Volume_Mining_Date , COUNT( id )

FROM volumes

GROUP BY DATE( Volume_Mining_Date ) [/sql] ),

στο διάγραμμα Highstock. Σκέψη μου είναι να δημιουργήσω ένα δισδιάστατο πίνακα και να περνάω με χρήση επανάληψης τα δεδομένα στο διάγραμμα (αλλά πώς??). Όποιος έχει ασχοληθεί, ας βοηθήσει να φύγει λίγο το σκουπιδάκι που έχει μπει στο μυαλό μου και δεν μπορώ να το συντάξω σωστά!!

Βασικά παίρνω τα δεδομένα που θέλω σε δύο πίνακες και μορφοποιώ την ημερομηνία κατάλληλα (με κόμματα αντί για παύλες που είναι αποθηκευμένη στην MySQL), αλλά εξακολουθώ να μην μπορώ να τους εισάγω στο διάγραμμα.

Είχα βρει λύση στο πρόβλημα πριν από καιρό, αλλά τώρα βρήκα την ευκαιρία να την γράψω μήπως και βοηθηθεί κάποιος που θα θέλει να χρησιμοποιήσει το widget στο μέλλον.

Έγραψα λοιπόν:




$this->Widget('ext.highstock.highstock.HighstockWidget', array(

        'dataProvider'=>$dataProvider,

        'options'=> array(

    		'theme' => 'dark-blue', 

        'rangeSelector'=>array('selected'=>1),

    		'credits' => array('enabled' => true),

        'title'=>array('text'=>'Ημερήσια Παραγωγή Όγκων'),

    		'xAxis'=>array('maxZoom'=>'4 * 3600000' ),  

    		'yAxis'=>array('title'=>array('text'=>'Τεμάχια')),

            'series'=>array(

                array(

                    'name'=>'Τεμάχια',

                    'dataResource'=>'data', 

                    'dateResource'=>'time', 

                )

            )

        )

    ));



Αυτό που έκανα ήταν να δημιουργήσω έναν βοηθητικό πίνακα ο οποίος θα γέμιζε κάθε φορά με τα επιθυμητά δεδομένα σύμφωνα με κάποια ερωτήματα SQL. Η στήλη ‘data’ του πίνακα περιείχε το σύνολο π.χ. των παραγόμενων προϊόντων ανά ημερομηνία σε αύξουσα διάταξη και η στήλη ‘time’ την ημερομηνία.

Το πρόβλημα ήταν ότι δεν μπορούσε να εισαχθεί στο διάγραμμα η ημερομηνία με την μορφή datetime, αλλά μόνο σε μορφή Unix_Timestamp, οπότε γράφοντας στον controller την εντολή


Yii::app()->db->createCommand("insert into stock_data (time, data) (SELECT UNIX_TIMESTAMP(Volume_Mining_Date),COUNT( id ) FROM volumes GROUP BY  Volume_Mining_Date)")->query();

λύθηκε το πρόβλημα. Η εντολή αυτή γεμίζει τον βοηθητικό πίνακα, από τον οποίο τραβάει δεδομένα το διάγραμμα, με τις επιθυμητές τιμές και μορφή δεδομένων.