Δημιουργια Συνάρτησης SUM

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
ORB
Δημοσιεύσεις: 19
Εγγραφή: 16 Ιουν 2010 22:57

Δημιουργια Συνάρτησης SUM

Δημοσίευση από ORB » 17 Ιουν 2010 02:29

Καλησπερα.

Εχω μια απορια αναφορικα με μια συναρτηση SUM()

To πρόβλημα μου δεν ειναι πως να δημιουργησω τη συναρτηση, αλλα το τι κανω εγω λαθος στην σκέψη μου , και δε μου εμφανίζει τα αναμενόμενα αθροισματα.

Λοιπον...
Eχω μια βαση με προιοντα τα οποια εμφανιζω σε ενα πινακα ο οποίος βρισκεται μεσα σε repeat region.Η βάση εχει επισης και Φ.Π.Α οποιος επιλέγεται με drop down list κατα το insert record.

Υπαρχουν καποια πεδια του πινακα τα οποια παιρνουν τις τιμες τους απο μια μαθηματικη παρασταση σαν και αυτη
$i1 = $h1 * (1-$row_recordset['fpa']) * 1.005;

To $h1 = $c1 + $e1 + $f1
με $f1 = ($c1 / $b1)* $a1

Αρα $i1 = $c1 + $e1 + (($c1 / $b1)* $a1) * (1-$row_recordset['fpa']) * 1.005

Θα συμφωνητε μεχρι εδω φανταζομαι...

Λοιπον εφου εχω φτιαξει 2 σελιδες για να κανω όλα τα αθροίσματα .

Την results_betweet_dates.php οπου περιέχει τη φορμα με τα 2 πεδία , και την results_summary.php η ποια εμφανίζει ολα τα αθροίσματα απο ολα τα κελια μεσα στη βάση.

Εφτιαξα λοιπον ενα query σε ενα αρχει sum_culculation_helper.php το οποιο θα μου υπολογίζει το SUM αυτης της στηλης που περιέχει την ποιο πανω σχέση που σας έδειξα, και αυτο το σκεφτηκα διότι κάθε ημερα(record) έχει δικο του Φ.Π.Α οποτε και δε μπορουσα χυμα να γράφω στο script γιατη αυτομάτως αυτο θα αναιρουσε τη μοναδικοτητα του Φ.Π.Α ανα ημέρα.
Εστω παραδειγμα το πρωτο πεδιο που με ενδιαφέρει το i1.To sum query ειναι το εξης :

Κώδικας: Επιλογή όλων

SELECT SUM((column_1c + column_1e) + (((column_1c / column_1b)* column_1a) * ((1-fpa)*1.005))), `date`, fpa
FROM TableName
WHERE `date` BETWEEN '$_GET[date1]' AND '$_GET[date2]'
Δοκιμαστικα λοιπον το εβαλα να κάνει ολα τα αθροισματα για 2 ημερομηνιες , αλλα το αθροισμα που μου εδινε ηταν αρκετα μεγαλυτερο απο το αναμενόμενο.

Δεν ειναι λογικη η σκέψη μου?Κάνω κατι λάθος?
Αρχικα σκέφτηκα πως θα κανω SUM τιμες που ηταν μεσα σε repeat region αλλα ουσιαστικα η SUM αυτό κανει , αθροιζει δεδομένα στηλών , η μαθηματικων παραστάσεων μεσα στην παρενθεση της η κανω λάθος?

Οποιαδηποτε παρατηρηση η αλλη μεθοδολογια θα με εκανε χαρουμενο.

Ευχαριστω εκ των προτέρων.

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Δημιουργια Συνάρτησης SUM

Δημοσίευση από fafos » 17 Ιουν 2010 02:55

kathe column thelei to diko tou SUM kai ola mazi (mesa se mia parntesh) as kati

((SUM(column_1c) + SUM(column_1e))... klp ...) as olatasum klp klp

an katalava kala..

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Δημιουργια Συνάρτησης SUM

Δημοσίευση από dva_dev » 17 Ιουν 2010 03:17

ORB έγραψε:Θα συμφωνητε μεχρι εδω φανταζομαι...
Μάλλον όχι. Η παράσταση είναι
$i1 = ($c1 + $e1 + ($c1 / $b1)* $a1) * (1-$row_recordset['fpa']) * 1.005;
Και το query

Κώδικας: Επιλογή όλων

SELECT SUM((column_1c + column_1e + (column_1c / column_1b)* column_1a) * (1-fpa)*1.005)
FROM TableName
WHERE `date` BETWEEN '$_GET[date1]' AND '$_GET[date2]'
Τα πεδία date, fpa δεν μπορείς να τα χρησιμοποιήσεις μόνα τους στο select αφού αλλάζουν σε διαφορετικές ημέρες.
Αν τα θέλεις στο select θα πρέπει να τα βάλεις και σε group by.

ORB
Δημοσιεύσεις: 19
Εγγραφή: 16 Ιουν 2010 22:57

Δημιουργια Συνάρτησης SUM

Δημοσίευση από ORB » 18 Ιουν 2010 04:15

Σε ευχαριστω παρα πολυ dva_dev μου δουλεψε μια χαρα :D

Παρολα αυτα συμβαινει κατι παρα πολυ περιεργο.....

Μετα απο εκεινα τα κελια που γεμιζουν με τα SUM που δημιουργησαμε παραπανω , κανω μια αθροιση σε ενα τελευταιο κελι
Σε καθε ενα κελι δινω μια μεταβλητη πχ:

Κώδικας: Επιλογή όλων

$i1= $row_i_Totals['SUM((column_c + column_1e + (column_1c / column_1b)*column_1a) * (1-fpa)*1.005)'];
Kαι μετα την φορμαρω:

Κώδικας: Επιλογή όλων

$formatted = number_format($i1 ,2); 
echo $formatted
Kαι ουτο καθ'εξης για όλα τα 7 κελια κατα αυξοντα αριθμο.
Στο τελευταιο κελι λοιπον για να κανω το συνολικο αθροισμα, των επιμερους αθροισματων,
κανω το εξης.:

Κώδικας: Επιλογή όλων

$Total_I = $i1 + $i2 + $i3 + $i4 + $i5 + $i6 + $i7;
$formatted = number_format($Total_I ,2);
echo $formatted
Kαι μου δινει το συνολικο αθροισμα.

Παρατηρησα ομως μετα απο δοκιμες , οτι μεσα απο 30-40 records, το συνολικο αθροισμα ($Total_I) παρουσιαζει μια αυξουσα αποκλιση απο την τιμη που ειχα υπολογισει με ενα αλλο query το οποιο ειναι ουσιαστικα αθροισμα των επιμέρους της μορφης:

Κώδικας: Επιλογή όλων

SELECT SUM(((column_c + column_1e + (column_1c / column_1b)*column_1a) * (1-fpa)*1.005))+((column_c + column_1e + (column_1c / column_1b)*column_1a) * (1-fpa)*1.005))+((column_c + column_1e + (column_1c / column_1b)*column_1a) * (1-fpa)*1.005))+((column_c + column_1e + (column_1c / column_1b)*column_1a) * (1-fpa)*1.005))+((column_c + column_1e + (column_1c / column_1b)*column_1a) * (1-fpa)*1.005))+((column_c + column_1e + (column_1c / column_1b)*column_1a) * (1-fpa)*1.005))+((column_c + column_1e + (column_1c / column_1b)*column_1a) * (1-fpa)*1.005)))
FROM TableName
WHERE `date` BETWEEN '$_GET[date1]' AND '$_GET[date2]'
Oταν λοιπον τα records ειναι λιγα μεχρι 40-50 , τα αποτελεσματα ειναι οκ, μετα απο ενα ορισμενο αριθμο , περνουν την ανιούσα πχ τωρα αυτη τη στιγμη , για αθροισματα απο 3 Οκτώμβη μέχρι 1 Ιούνιου βλεπω μια αποκλιση 59,267.17 ... και αυτα ειναι ευρο γιαυτο με καίει το θέμα.
Μέσα απο php my admin τρέχω το total sum query που ειπα παραπανω και μου δίνει μεταξυ των 2 παραπανω ημερομηνιων total sum 1,007,203.79 και το script μου στη σελιδα δινει 1,066,470.96 :o

Εχω μπερδευτει γιατι για μικρο αριθμό reconds συμφωνουνε , αλλα για μεγαλο...διαφωνουνε!

Please Help! :)

ORB
Δημοσιεύσεις: 19
Εγγραφή: 16 Ιουν 2010 22:57

Δημιουργια Συνάρτησης SUM

Δημοσίευση από ORB » 18 Ιουν 2010 04:46

Mολις παρατηρησα οτι μετα απο τη δημιουργια του query στο dreamweaver, οταν εκανα echo to recorset , δεν υπηρχε μεσα σε αυτο ολόκληρη η παρασταση αλλα περιπου το 75% αυτης, που με εκανε να σκεφτω μήπως η SUM() εχει καποιο περιορισμο το μηκος της φορμουλας που μπορει μπορει να υπολογισει μεσα της....απο οτι ειδα γιατι βαρεθηκα να μετραω , πρεπει το total sum , να περιείχε πάνω απο 300 χαρακτήρες.....

Να υποθέσω οτι τελικα η διαφορά που παρατηρησα οφείλεται σε αυτο?

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Δημιουργια Συνάρτησης SUM

Δημοσίευση από Apostolis_38 » 18 Ιουν 2010 09:47

Αν κατάλαβα καλά, μάλλον οι τιμές σου έχουν δεκαδικά οπότε η sum κάνει στρογγυλοποίηση πρός τα πάνω (στη συγκεκριμένη περίπτωση, άλλη φορά μπορεί να κάνει προς τα κάτω - εξαρτάται από τα δεκαδικά).
Φαντάζομαι οτι δεν μπορείς να χρησιμοποιήσεις την ceil οπότε δεν ξέρω αν υπάρχει λύση.
Η number_format επεμβαίνει στον τρόπο εμφάνισης του αριθμού κι όχι στον ίδιο τον αριθμό.

Υπ' όψιν πάντως οτι αυτή η στρογγυλοποίηση είναι γενικότερο πρόβλημα των προγραμμάτων. Θυμάμαι οτι ακόμα και λογιστικές εφαρμογές αντιμετώπιζαν τέτοια προβλήματα και οι λογιστές αναγκάζονταν να κάνουν αλχημίες για μερικά ευρουδάκια.
Δεν γνωρίζω αν υπάρχει κάποιο πρόγραμμα που το έλυσε αυτό.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Δημιουργια Συνάρτησης SUM

Δημοσίευση από dva_dev » 18 Ιουν 2010 11:31

Το κάθε κελί τι θέλεις να περιέχει;
Το άθροισμα για κάθε ημέρα;
Στο τέλος θέλεις το άθροισμα για όλες τις ημέρες ή ανά 7 ημέρες;

Δείξε μας το κώδικα με το query που έχεις φτιάξει για να γεμίζεις τα κελιά και να υπολογίζεις το άθροισμα, γιατί σε κάποιο (ή και και στα δύο) κάνεις λάθος.

Θα βόηθαγε επίσης να μας βάλεις μερικές ενδεικτικές τιμές (τι θα περιέχουν οι γραμμές του πίνακα και τι άθροισμα θέλεις να βγαίνει στο τέλος).

ORB
Δημοσιεύσεις: 19
Εγγραφή: 16 Ιουν 2010 22:57

Δημιουργια Συνάρτησης SUM

Δημοσίευση από ORB » 18 Ιουν 2010 20:05

@dva_dev

Χρησιμοποιω αυτο το query , βασιζόμενος στο query που μου υπέδειξες στο 1ο σου ποστ εδω, τροποποιημενο, και το οποιο δημιουργει 7 διαφορετικα recordset, για τον υπολογισμο συνολικων αθροισματων για κάθε ειδος προιόντος.

Κώδικας: Επιλογή όλων

SELECT SUM((kinisis_1c + kinisis_1e + (kinisis_1c / kinisis_1b)* kinisis_1a) * (1-fpa)*1.005),SUM((100c + 100e + (100c / 100b)* 100a) * (1-fpa)*1.005),SUM((super_1c  + super_1e + (super_1c / super_1b)* super_1a) * (1-fpa)*1.005),SUM((95_1c + 95_1e + (95_1c / 95_1b)* 95_1a) * (1-fpa)*1.005),SUM((95_2c + 95_2e + (95_2c / 95_2b)*  95_2a) * (1-fpa)*1.005),SUM((super_2c + super_2e + (super_2c / super_2b)* super_2a) * (1-fpa)*1.005),SUM((kinisis_2c + kinisis_2e + (kinisis_2c / kinisis_2b)*  kinisis_2a) * (1-fpa)*1.005)
FROM kiniseis
WHERE `date` BETWEEN '$_GET[date1]' AND '$_GET[date2]'
Τα οποια χρησιμοποιω για κάθε κελι , ως παρακάτω.

Κώδικας: Επιλογή όλων

<?php
$i1 = $row_i_Totals&#91;'SUM&#40;&#40;kinisis_1c + kinisis_1e + &#40;kinisis_1c / kinisis_1b&#41;* kinisis_1a&#41; * &#40;1-fpa&#41;*1.005&#41;'&#93;;
$formatted = number_format&#40;$i1 ,2&#41;;
echo $formatted
?>

Κώδικας: Επιλογή όλων

<?php 
$i2 = $row_i_Totals&#91;'SUM&#40;&#40;100c + 100e + &#40;100c / 100b&#41;* 100a&#41; * &#40;1-fpa&#41;*1.005&#41;'&#93;;
$formatted = number_format&#40;$i2 ,2&#41;;
echo $formatted
?>

Κώδικας: Επιλογή όλων

<?php 
$i3 = $row_i_Totals&#91;'SUM&#40;&#40;super_1c  + super_1e + &#40;super_1c / super_1b&#41;* super_1a&#41; * &#40;1-fpa&#41;*1.005&#41;'&#93;;	
$formatted = number_format&#40;$i3 ,2&#41;;
echo $formatted
?>

Κώδικας: Επιλογή όλων

<?php 
$i4 = $row_i_Totals&#91;'SUM&#40;&#40;95_1c + 95_1e + &#40;95_1c / 95_1b&#41;* 95_1a&#41; * &#40;1-fpa&#41;*1.005&#41;'&#93;;
$formatted = number_format&#40;$i4 ,2&#41;;
echo $formatted
?>

Κώδικας: Επιλογή όλων

<?php 
$i5 = $row_i_Totals&#91;'SUM&#40;&#40;95_2c + 95_2e + &#40;95_2c / 95_2b&#41;*  95_2a&#41; * &#40;1-fpa&#41;*1.005&#41;'&#93;;
$formatted = number_format&#40;$i5 ,2&#41;;
echo $formatted
?>

Κώδικας: Επιλογή όλων

<?php 
$i6 = $row_i_Totals&#91;'SUM&#40;&#40;super_2c + super_2e + &#40;super_2c / super_2b&#41;* super_2a&#41; * &#40;1-fpa&#41;*1.005&#41;'&#93;;
$formatted = number_format&#40;$i6 ,2&#41;;
echo $formatted
?>

Κώδικας: Επιλογή όλων

<?php 
$i7 = $row_i_Totals&#91;'SUM&#40;&#40;kinisis_2c + kinisis_2e + &#40;kinisis_2c / kinisis_2b&#41;*  kinisis_2a&#41; * &#40;1-fpa&#41;*1.005&#41;'&#93;;
$formatted = number_format&#40;$i7 ,2&#41;;
echo $formatted
?>
Μετα στο 8ο κελί τα αθροιζω ώς εξης.

Κώδικας: Επιλογή όλων

<?php 
$Total_I = $i1 + $i2 + $i3 + $i4 + $i5 + $i6 + $i7;
$formatted = number_format&#40;$Total_I ,2&#41;;
echo $formatted
?>
Δοκιμαστικα εφτιαξα αυτο τον σιδηροδρομο σε μορφη query που αναμενομενα τουλαχιστον , περιμενα να μου δίνει το ίδιο αθροισμα με το $Total_I :

Κώδικας: Επιλογή όλων

SELECT SUM&#40;&#40;&#40;kinisis_1c + kinisis_1e + &#40;kinisis_1c / kinisis_1b&#41;* kinisis_1a&#41; * &#40;1-fpa&#41;*1.005&#41;+&#40;&#40;100c + 100e + &#40;100c / 100b&#41;* 100a&#41; * &#40;1-fpa&#41;*1.005&#41;+&#40;&#40;super_1c + super_1e + &#40;super_1c / super_1b&#41;* super_1a&#41; * &#40;1-fpa&#41;*1.005&#41;+&#40;&#40;95_1c + 95_1e + &#40;95_1c / 95_1b&#41;* 95_1a&#41; * &#40;1-fpa&#41;*1.005&#41;+&#40;&#40;95_2c + 95_2e + &#40;95_2c / 95_2b&#41;* 95_2a&#41; * &#40;1-fpa&#41;*1.005&#41;+&#40;&#40;super_2c + super_2e + &#40;super_2c / super_2b&#41;* super_2a&#41; * &#40;1-fpa&#41;*1.005&#41;+&#40;&#40;kinisis_2c + kinisis_2e + &#40;kinisis_2c / kinisis_2b&#41;* kinisis_2a&#41; * &#40;1-fpa&#41;*1.005&#41;&#41;
FROM KINISEIS
WHERE kiniseis.`date` BETWEEN '$_GET&#91;date1&#93;' AND '$_GET&#91;date2&#93;'
Παρά ταυτα , αυτο το query δινει μικροτερο αθροισμα απο οτι τα επιμερους αθροισματα

Κώδικας: Επιλογή όλων

$Total_I = $i1 + $i2 + $i3 + $i4 + $i5 + $i6 + $i7;
Και στο dreamweaver οταν κανω echo το σιδηροδρομο δε μου βγαζει ολη την παρασταση αλλα περιπου την μιση :

<?php echo $row_Total_Sum['SUM(((kinisis_1c + kinisis_1e + (kinisis_1c / kinisis_1b)* kinisis_1a) * (1-fpa)*1.005)+((100c + 100e + (100c / 100b)* 100a) * (1-fpa)*1.005)+((super_1c + super_1e + (super_1c / super_1b)* super_1a) * (1-fpa)*1.005)+((95_1c + 95_1e + (95_1c / 95_1b)* 95_1']; ?>

Βλεπετε οτι σταματαει στο 95_1 , που τετοιο κελι δεν υπαρχει, αλλα υπαρχει το 95_1a.

Γιαυτο και ρωτησα μηπως υπαρχει περιορισμος στο μηκος των χαρακτηρων που μπορει να εμπεριεχει η SUM()

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Δημιουργια Συνάρτησης SUM

Δημοσίευση από dva_dev » 19 Ιουν 2010 00:46

(Αλλο είχα καταλάβει τελικά ότι προσπαθείς να κάνεις, μάλλον ο Apostolis_38 έπεσε πιο κοντά)

Αυτό που κάνεις στην php είναι sum(πεδίο1)+sum(πεδίο2)+...+sum(πεδίο7), το οποίο ίσως να δίνει διαφορετικό αποτέλεσμα από το sum(πεδίο1+πεδίο2+...+πεδίο7) λόγω του τρόπου που αποθηκεύονται οι πραγματικοί.

Αρχικά, για να μπορείς να δουλεύεις πιο άνετα, θα μπορούσες στα queries να χρησιμοποιείς aliases, και να τα ξαναγράψεις με πιο κατανοητή μορφή. Π.χ.

Κώδικας: Επιλογή όλων

SELECT
	SUM&#40;&#40;kinisis_1c + kinisis_1e + &#40;kinisis_1c / kinisis_1b&#41;* kinisis_1a&#41; * &#40;1-fpa&#41;*1.005&#41; sum1,
	SUM&#40;&#40;100c + 100e + &#40;100c / 100b&#41;* 100a&#41; * &#40;1-fpa&#41;*1.005&#41; sum2,
	SUM&#40;&#40;super_1c  + super_1e + &#40;super_1c / super_1b&#41;* super_1a&#41; * &#40;1-fpa&#41;*1.005&#41; sum3,
	SUM&#40;&#40;95_1c + 95_1e + &#40;95_1c / 95_1b&#41;* 95_1a&#41; * &#40;1-fpa&#41;*1.005&#41; sum4,
	SUM&#40;&#40;95_2c + 95_2e + &#40;95_2c / 95_2b&#41;*  95_2a&#41; * &#40;1-fpa&#41;*1.005&#41; sum5,
	SUM&#40;&#40;super_2c + super_2e + &#40;super_2c / super_2b&#41;* super_2a&#41; * &#40;1-fpa&#41;*1.005&#41; sum6,
	SUM&#40;&#40;kinisis_2c + kinisis_2e + &#40;kinisis_2c / kinisis_2b&#41;*  kinisis_2a&#41; * &#40;1-fpa&#41;*1.005&#41; sum7
FROM kiniseis
WHERE `date` BETWEEN '$_GET&#91;date1&#93;' AND '$_GET&#91;date2&#93;'
Στον κώδικα σου τώρα μπορείς να πάρεις τα αποτελέσματα με

Κώδικας: Επιλογή όλων

$i1 = $row_i_Totals&#91;'sum1'&#93;;
$i2 = $row_i_Totals&#91;'sum2'&#93;;
...
$i7 = $row_i_Totals&#91;'sum7'&#93;;
Τώρα όταν κάνεις

Κώδικας: Επιλογή όλων

$Total_I = $i1 + $i2 + $i3 + $i4 + $i5 + $i6 + $i7;
Tο αντίστοιχο αποτέλεσμα θα το πάρεις από το query

Κώδικας: Επιλογή όλων

SELECT
	SUM&#40;&#40;kinisis_1c + kinisis_1e + &#40;kinisis_1c / kinisis_1b&#41;* kinisis_1a&#41; * &#40;1-fpa&#41;*1.005&#41;+
	SUM&#40;&#40;100c + 100e + &#40;100c / 100b&#41;* 100a&#41; * &#40;1-fpa&#41;*1.005&#41;+
	SUM&#40;&#40;super_1c  + super_1e + &#40;super_1c / super_1b&#41;* super_1a&#41; * &#40;1-fpa&#41;*1.005&#41;+
	SUM&#40;&#40;95_1c + 95_1e + &#40;95_1c / 95_1b&#41;* 95_1a&#41; * &#40;1-fpa&#41;*1.005&#41;+
	SUM&#40;&#40;95_2c + 95_2e + &#40;95_2c / 95_2b&#41;*  95_2a&#41; * &#40;1-fpa&#41;*1.005&#41;+
	SUM&#40;&#40;super_2c + super_2e + &#40;super_2c / super_2b&#41;* super_2a&#41; * &#40;1-fpa&#41;*1.005&#41;+
	SUM&#40;&#40;kinisis_2c + kinisis_2e + &#40;kinisis_2c / kinisis_2b&#41;*  kinisis_2a&#41; * &#40;1-fpa&#41;*1.005&#41; totalSum
FROM kiniseis
WHERE `date` BETWEEN '$_GET&#91;date1&#93;' AND '$_GET&#91;date2&#93;'
Παίρνοντας την τιμή (αφού έχουμε πάλι alias) με

Κώδικας: Επιλογή όλων

echo $row_Total_Sum&#91;'totalSum'&#93;
Τα πεδία 100* super* kinisis* κλπ τι τύπου είναι;

ORB
Δημοσιεύσεις: 19
Εγγραφή: 16 Ιουν 2010 22:57

Δημιουργια Συνάρτησης SUM

Δημοσίευση από ORB » 19 Ιουν 2010 01:46

dva_dev έγραψε:
Τα πεδία 100* super* kinisis* κλπ τι τύπου είναι;
Eιναι varchar.
Μονο ο fpa ειναι double.

Οποτε να χρησιμοποιησω aliases για να μικρυνω το μακρυναρι αν καταλαβα καλα , σωστα?

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Δημιουργια Συνάρτησης SUM

Δημοσίευση από dva_dev » 19 Ιουν 2010 02:11

Ναι. Στην php θα έχεις απλώς $i1 = $row_i_Totals['sum1'] (αν το alias για το 1o sum είναι sum1). Είναι σαν να δίνεις όνομα στην παράσταση sum(μπλά+μπλά+μπλά*μπλά).

Για τα πεδία αφού αποθηκεύεις αριθμούς γιατί έχεις varchar? Θα έπρεπε να είναι κάτι σε αριθμητικό. Αν υποστηρίζει η mysql που έχεις decimal νομίζω είναι το προτιμότερο, αλλιώς double.

ORB
Δημοσιεύσεις: 19
Εγγραφή: 16 Ιουν 2010 22:57

Δημιουργια Συνάρτησης SUM

Δημοσίευση από ORB » 19 Ιουν 2010 07:02

Οκ τα δοκιμασα ολα.
Το μεγαλο το query δε δουλευει και οντως σταματαει να κανει τον υπολογισμο απο ενα σημειο και μετα.

Η μεθοδος $ι1+$ι2 κτλ ειναι σωστη αλλα υπαρχει αποκλιση..λογικα πρεπει να οφειλεται σε στρογγυλοποιησεις οπως ανεφερε και ο Apostolis_38 .
Εκανα τη δοκιμη σε ενα συνολο 57 records.
Αντεγραψα τις ημερισιες τιμες στο excel..
εκανα το αθροισμα εβγαινε 296,000.76
Στην php μου εδινε 295,697.14

Και το Total_Sum sql ερωτημα 276010.29

Λογικα η SUM κανει ανεπαλληλες στρογγυλοποιησεις , και οσο αυξανονται τα records,τοσο αυξάνει και η αποκλιση :(

Καπoioς τροπος να μη γινονται στρογγυλοποιησεις γνωριζει καποιος?

ORB
Δημοσιεύσεις: 19
Εγγραφή: 16 Ιουν 2010 22:57

Δημιουργια Συνάρτησης SUM

Δημοσίευση από ORB » 27 Ιουν 2010 23:56

Καλησπερα και παλι... :D

Ισως βρηκα ενα work arround για το προβλημα...αλλα εχω κολλησει στη μέση..

Σκεφτηκα να μη χρησιμοποιησω την SUM() για να αποφυγω την στρογγυλοποιηση..

Κώδικας: Επιλογή όλων

SELECT &#40;kinisis_1c + kinisis_1e + &#40;&#40;kinisis_1c / kinisis_1b&#41; * kinisis_1a&#41;&#41; * &#40;1 - fpa&#41; * 1.005 AS kinisis_1,   &#40;100c+ 100e+ &#40;&#40;100c/ 100b&#41; * 100a&#41;&#41; * &#40;1 - fpa&#41; * 1.005 AS `100ara`,   &#40;super_1c + super_1e + &#40;&#40;super_1c / super_1b&#41; * super_1a&#41;&#41; * &#40;1 - fpa&#41; * 1.005 AS super_1,   &#40;95_1c+ 95_1e+ &#40;&#40;95_1c/ 95_1b&#41; * 95_1a&#41;&#41; * &#40;1 - fpa&#41; * 1.005 AS `95_1`,   &#40;95_2c+ 95_2e+ &#40;&#40;95_2c/ 95_2b&#41; * 95_2a&#41;&#41; * &#40;1 - fpa&#41; * 1.005 AS `95_2`,   &#40;super_2c + super_2e + &#40;&#40;super_2c / super_2b&#41; * super_2a&#41;&#41; * &#40;1 - fpa&#41; * 1.005 AS super_2,   &#40;kinisis_2c + kinisis_2e + &#40;&#40;kinisis_2c / kinisis_2b&#41; * kinisis_2a&#41;&#41; * &#40;1 - fpa&#41; * 1.005 AS kinisis_2
FROM kiniseis
WHERE `date` BETWEEN '$_GET&#91;date1&#93;' AND '$_GET&#91;date2&#93;'
Το output αυτου του κωδικα δινει ενα πινακα με 7 στηλες , και χ γραμμες αναλογα με το ποσες καταχωρησεις υπαρχουν μεταξυ των date1 και date2.

Αναρωτιεμαι λοιπον αν μπορω να δώσω για κάθε γραμή με δυναμικο τρόπο μια μεταβλητη, που θα του λεει πχ "για καθε row θεσε μια μεταβλητη, και μετα αθροισε τες."

Kαποιος ισως ξερει πως γινεται αυτο?

Με εχει πιασει απελπισια με αυτο το πραγμα , μονο αυτη η λεπτομερια μου εχει μεινει :(

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6231
Εγγραφή: 30 Νοέμ 2004 03:09

Δημιουργια Συνάρτησης SUM

Δημοσίευση από fafos » 28 Ιουν 2010 01:04


ORB
Δημοσιεύσεις: 19
Εγγραφή: 16 Ιουν 2010 22:57

Δημιουργια Συνάρτησης SUM

Δημοσίευση από ORB » 28 Ιουν 2010 18:46

fafos έγραψε:dokimase thn array_sum: http://php.net/manual/en/function.array-sum.php
Αυτο θα κανω τωρα fafos :)

Θα σας πω νεα συντομα :)

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες