Στατιστικά - Γραφήματα
#1
Posted 14 November 2012 - 10:50 AM
Έχοντας δημιουργήσει ένα επαρκές σύστημα crud, ήρθε η ώρα για την εξαγωγή κάποιων στατιστικών συμπερασμάτων, σε μορφή γραφημάτων ή απλής πληροφοριακής μορφής με χρήση φίλτρων, από τη βάση δεδομένων.
Έχει ασχοληθεί κανείς με παρόμοιο πρόβλημα;
Υπάρχει μήπως κανένα extension του Yii που διευκολύνει την κατάσταση;
Τι γίνεται στην περίπτωση των γραφημάτων; Πως γίνεται η σύνδεσή τους με τα δεδομένα της βάσης; Γενικότερα, πως ενσωματώνεται ένα γράφημα σε μια ιστοσελίδα;
Οι ερωτήσεις προφανώς είναι γενικές αλλά θα εξειδικευτούν όταν λάβω κάποιο feedback από τους αναγνώστες του φόρουμ!!
#2
Posted 14 November 2012 - 10:57 AM
#3
Posted 14 November 2012 - 02:45 PM
#4
Posted 14 November 2012 - 03:06 PM
#5
Posted 30 November 2012 - 07:31 AM
Επιστρέφω στην ανάπτυξη της εφαρμογής μετά από καιρό λόγω άλλων προτεραιοτήτων!!
Το θέμα λοιπόν είναι να παρουσιάσω διαγράμματα τα οποία θα τραβάνε κάποια δεδομένα από την βάση και θα μπορούν να μου δώσουν κάποιας μορφής διαγραμματική πληροφόρηση.
Βασίλη, είπες ότι αυτό που χρειάζεται αρχικά είναι να κατεβάσω τη βιβλιοθήκη και να κάνω register το αρχείο hicharts.js που εμπεριέχει χρησιμοποιώντας την εντολή,
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js_plugins/highcharts.js);
στον controller action. Κι εδώ είναι που έχω απορία:
Σε ποιόν controller action εννοείς;;
α) Εννοείς σε κάποιον από τους controllers που χρησιμοποιώ για την διαχείριση των 13 πινάκων της βάσης δεδομένων;
β) Εννοείς τη μέθοδο actions() που δηλώνεται στον ορισμό της κλάσης του SiteController;
γ) Εννοείς να φτιάξω έναν δικό μου Controller που να κληρονομεί από την κλάση Controller στην οποία θα δηλώνω μεθόδους κλπ; Αν κάνω έναν δικό μου controller που θα ορίζεται η λογική δεν χρειάζεται να γράψω κώδικα σε ένα αρχείο view όσο αφορά την εμφάνιση;
δ) Εννοείς κάτι άλλο που δεν καταλαβαίνω; Δώσε μου αν μπορείς ένα προγραμματιστικό παράδειγμα!!
Επίσης ανέφερες ότι πρέπει να γράψω τον κώδικα javascript στον controller. Δεν πρέπει να γράφουμε κώδικα που σχετίζεται με την παρουσίαση των δεδομένων σε αρχεία όψεων (views) ;
Αυτά για αρχή...Σίγουρα μετά την απάντησή σου θα έχω κι άλλες απορίες να ξέρεις.
Ευχαριστώ εκ των προτέρων!!
#6
Posted 30 November 2012 - 08:58 AM
marios, on 30 November 2012 - 07:31 AM, said:
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js_plugins/highcharts.js);
Σωστά.
marios, on 30 November 2012 - 07:31 AM, said:
Σε ποιόν controller action εννοείς;;
α) Εννοείς σε κάποιον από τους controllers που χρησιμοποιώ για την διαχείριση των 13 πινάκων της βάσης δεδομένων;
β) Εννοείς τη μέθοδο actions() που δηλώνεται στον ορισμό της κλάσης του SiteController;
γ) Εννοείς να φτιάξω έναν δικό μου Controller που να κληρονομεί από την κλάση Controller στην οποία θα δηλώνω μεθόδους κλπ; Αν κάνω έναν δικό μου controller που θα ορίζεται η λογική δεν χρειάζεται να γράψω κώδικα σε ένα αρχείο view όσο αφορά την εμφάνιση;
δ) Εννοείς κάτι άλλο που δεν καταλαβαίνω; Δώσε μου αν μπορείς ένα προγραμματιστικό παράδειγμα!!
Στο controller action που θα έχεις για να εμφανίσεις τα αποτελέσματά σου. Δεν είναι κάποιο συγκεκριμένο. Όπως έχεις για τις άλλες σελίδες έτσι θα φτιάξεις σε ένα οποιοδήποτε controller ένα action για την εμφάνιση του γραφήματος. Πχ.
class GraphController extends Controller {
....
public function actionShowGraph() {
.....
}
}
marios, on 30 November 2012 - 07:31 AM, said:
Γενικά ναι, αλλά πρόσεξε ότι η HighCharts είναι βιβλιοθήκη σε Javascript καθαρά. Τι σημαίνει αυτό; Ότι με κάποιο τρόπο θα πρέπει να τροφοδοτήσεις τα δεδομένα για το γράφημα. Δηλαδή θα το κάνεις σε javascript αναγκαστικά. Δεν μπορείς να θεωρήσεις 100% ότι αυτό το σύνολο είναι κώδικας view. Εγώ προσωπικά τον κώδικα σε javascript τον βάζω πάντα στο controller action και όχι στο view, χωρίς αυτό να είναι δεσμευτικό.
Όπως είπα, θα πρέπει λίγο να διαβάσεις/παίξεις με παραδείγματα από το site του Highcharts για να καταλάβεις τι γίνεται. Δυστυχώς δεν έχω κάποιο πρόχειρο παράδειγμα αυτή τη στιγμή να σου δώσω...
#7
Posted 07 December 2012 - 08:15 AM
Έχω μια ερωτησούλα που αφορά την SQL αυτή τη φορά.
Γράφω λοιπόν:
$m5 = Frames::model()->findAllBySql("SELECT COUNT(id) FROM Frames WHERE Frame_Cutting_Date BETWEEN \"01/03/2012\" AND \"31/03/2012\"");
echo $m5;H echo μου δίνει αποτέλεσμα array και όχι έναν ακέραιο αριθμό όπως θα έπρεπε και όπως παίρνω όταν κάνω δοκιμή την εντολή στον PHPMyAdmin. Απ' ό,τι είδα στο manual η μέθοδος findAllBySql επιστρέφει μια ActiveRecord. Χρειάζεται να χρησιμοποιήσω και κάποια μέθοδο (π.χ get) στην echo ή είναι τελείως λάθος το σκεπτικό και πρέπει να κάνω κάτι άλλο??
#8
Posted 07 December 2012 - 09:17 AM
$m5 = Yii::app()->db->createCommand("SELECT COUNT(id) FROM Frames WHERE Frame_Cutting_Date BETWEEN \"01/03/2012\" AND \"31/03/2012\"")->queryScalar();
echo $m5;Αυτό θα σου επιτρέψει απλά ένα αριθμό. Δηλαδή δε χρειάζεται να πάρεις από το μοντέλο το count.
Επίσης το σωστό (και ασφαλές) στις παραμέτρους των ερωτημάτων είναι να χρησιμοποιείς παραμέτρους πχ. το :dateStart και μετά να κάνεις bind το :dateStart με τη τιμή που θέλεις. Δηλαδή:
$m5 = Yii::app()->db->createCommand("SELECT COUNT(id) FROM Frames WHERE Frame_Cutting_Date BETWEEN :dateStart AND :dateEnd")->queryScalar(array(':dateStart'=>'01/03/2012', ':dateEnd'=>'31/03/2012'));
#9
Posted 07 December 2012 - 12:55 PM
Ευχαριστώ και πάλι Βασίλη!!

Help











