Επιστροφή NULL value από SELECT

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

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

Απάντηση
Geotenia
Δημοσιεύσεις: 40
Εγγραφή: 15 Μαρ 2011 09:55

Επιστροφή NULL value από SELECT

Δημοσίευση από Geotenia » 12 Απρ 2013 11:38

Κάνω τη παρακάτω query στη βάση μου

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

SELECT Metra.Metro, Count(Ergo.Ergo_ID) AS synerg, Round(Sum(Ergo.Aitoymeno_poso),2) AS dd FROM Ergo INNER JOIN Metra ON Ergo.Metro = Metra.Metro_ID WHERE (Ergo_ID LIKE '".$a."%'  AND SUBSTR(Ergo_ID,-4)>2000) GROUP BY Metra.Metro
Ο πίνακας μέτρο έχει 3 values (311,312,313). Αν σε κάποιο από αυτά το COUNT είναι 0 (δεν υπάρχει εγγραφή που να αντιστοιχεί σε κάποιο μέτρο) η SQL δε μου γυρνάει τίποτα (δηλαδή για παράδειγμα αν έχω έργα μόνο στο 312 και 313 δε μου εμφανίζει 311:0-312:2-313:5, δηλαδή μου εμφανίζει μόνο 312:2-313:5).
Εγώ θέλω να μου εμφανίζει και το μέτρο που δεν έχει εγγραφή με 0. Πως μπορώ να το κάνω αυτό? Εχω δοκιμάσει να αλλάξω το INNER με LEFT-RIGHT, με OUTER και δεν είχα αλλαγή. Αλλαξα τη σειρά των πινάκων στο JOIN και πάλι τίποτα.

Εχετε καμιά άλλη ιδέα;

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

Επιστροφή NULL value από SELECT

Δημοσίευση από Apostolis_38 » 12 Απρ 2013 14:10

Δοκίμασε κάτι τέτοιο:

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

SELECT Metra.Metro,
                 SUM(case when Ergo.Ergo_ID is null then 1 else 0 end ) AS synerg_Null,
                 SUM(case when Ergo.Ergo_ID is not null then 1 else 0 end ) AS synerg_NotNull,
           Round(Sum(Ergo.Aitoymeno_poso),2) AS dd FROM Ergo
INNER JOIN Metra
          ON Ergo.Metro = Metra.Metro_ID
WHERE (Ergo_ID LIKE '".$a."%'  AND SUBSTR(Ergo_ID,-4)>2000)
GROUP BY Metra.Metro

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

Επιστροφή NULL value από SELECT

Δημοσίευση από Apostolis_38 » 12 Απρ 2013 14:16

Κάτι άλλο που βρήκα μόλις τώρα:
NULL values are ignored by all aggregate functions except COUNT(*), which counts rows and not values.

εδώ: http://82.157.70.109/mirrorbooks/mysqlc ... 1sec6.html

Geotenia
Δημοσιεύσεις: 40
Εγγραφή: 15 Μαρ 2011 09:55

Επιστροφή NULL value από SELECT

Δημοσίευση από Geotenia » 17 Απρ 2013 14:42

Δυστυχώς η λύση που μου πρότεινες δε δουλεύει.
Μάλλον δε το έχω εξηγήσει καλά. Υπάρχει περίπτωση να μην υπάρχει Ergo_ID που να αρχίζει από το sting "a" για κάποιο μέτρο. Ωστόσο θέλω να μου δείχνει ότι για αυτό το Metro_ID το COUNT είναι 0 και όχι να μη το δείχνει καθόλου. Δηλαδή αν βρει ότι δεν υπάρχει για ένα συγκεκριμένο Metro_ID κάποιο Ergo_ID Που να ξεκινάει από "a" να μου δείχνει ότι σε αυτό το Metro_ID το Count(Ergo_ID) είναι 0 και όχι να το εξαφανίζει εντελώς.
Ισως αυτό που ζητάω δε γίνεται.
Ευχαριστώ πολύ πάντως!

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

Επιστροφή NULL value από SELECT

Δημοσίευση από Apostolis_38 » 17 Απρ 2013 15:01

Τότε ίσως να μπορείς να κάνεις κάτι άλλο.
Δεν ξέρω σε τι εφαρμογή θα το χρησιμοποιήσεις οπότε θα στο γράψω σε php που ξέρω.

Αφού τρέξεις το query σου θα μπορούσες να γράψεις κάτι τέτοιο:

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

$query = το query σου;
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result) )    {
    $nullErgo_ID = $row['Ergo_ID'];
    if($nullErgo_ID == '')    {
        echo'Ergo_ID:0';
    }    else    {
        echo  $nullErgo_ID;
    }
    Εδώ τυπώνεις τα υπόλοιπα.
} 
Για δοκίμασε κάτι τέτοιο.

Geotenia
Δημοσιεύσεις: 40
Εγγραφή: 15 Μαρ 2011 09:55

Επιστροφή NULL value από SELECT

Δημοσίευση από Geotenia » 17 Απρ 2013 15:07

Δοκίμασα και κάτι τέτοιο αλλά δε μπορώ να ξέρω σε ποιό Metro_ID αντιστοιχεί το null. Δηλαδή δε μου γυρνάει η MySQL κάτι σαν 311: 1, 312:NULL, 313:5, ώστε να το διαχειριστώ έτσι. Μπορεί το NULL να είναι σε κάποιο άλλο Metro_ID γιά άλλο "a"

Άβαταρ μέλους
_tasos
Δημοσιεύσεις: 116
Εγγραφή: 03 Μάιος 2007 15:06
Επικοινωνία:

Επιστροφή NULL value από SELECT

Δημοσίευση από _tasos » 17 Απρ 2013 20:49

Θα μπορούσες να χρησιμοποιήσεις if μέσα στο select και μετατρέπεις τις NULL τιμές σε κάποια άλλη τιμή που είναι ουδέτερη, π.χ. 0.

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

SELECT 
	Count(Ergo.Ergo_ID) AS synerg, 
	Round(Sum(Ergo.Aitoymeno_poso),2) AS dd,
	IF(Metra.Metro IS NULL, 0, Metra.Metro) AS metro_no_null	
FROM Ergo 
	INNER JOIN Metra ON Ergo.Metro = Metra.Metro_ID 
WHERE (Ergo_ID LIKE '".$a."%'  AND SUBSTR(Ergo_ID,-4)>2000) 
GROUP BY metro_no_null

Άβαταρ μέλους
nirvana
Δημοσιεύσεις: 241
Εγγραφή: 01 Σεπ 2005 18:28
Τοποθεσία: Αγ. Παρασκευή

Επιστροφή NULL value από SELECT

Δημοσίευση από nirvana » 20 Απρ 2013 00:19

Θα μπορούσες να χρησιμοποιήσεις if μέσα στο select και μετατρέπεις τις NULL τιμές σε κάποια άλλη τιμή που είναι ουδέτερη, π.χ. 0
B.t.w Για να το κάνεις αυτό, δεν χρειάζεται if, υπάρχει ειδική function στην mysql.

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

SELECT COALESCE(null,'0')

Geotenia
Δημοσιεύσεις: 40
Εγγραφή: 15 Μαρ 2011 09:55

Επιστροφή NULL value από SELECT

Δημοσίευση από Geotenia » 24 Απρ 2013 09:10

Δυστυχώς τίποτα από τα 2 δε δουλεύει. Ευχαριστώ πολύ πάντως για την ασχολία σου!

Απάντηση

Επιστροφή στο “MySQL”

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

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