Announcement

Collapse
No announcement yet.

Bei leerem Abfrageergebnis Standardwerte setzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Originally posted by A.DA View Post
    Soweit hab ichs jetzt... der Vorschlag funktioniert.

    jetzt baue ich sie mal um.

    kann ich den zu den 1 2 3 auch echte Abfragewerte beifügen? wenn das szenario wie oben beschrieben eintritt
    Mir scheint, Du hast das noch nicht richtig verstanden (oder ich Deine Frage nicht)
    Das von Dir angeführte Statement ist ein (geänderter) Ausschnitt aus dem Vorschlag von Falk.
    Er ist genau dazu gedacht, die echten Ergebnisse per Union zu ergänzen, und zwar genau für den Fall, dass die "echten" Ergebnisse leer sind.
    "1,2,3" sind nur Platzhalter für die Werte, die Du einsetzen möchtest für den "NullCase". Sie benötigen auch kein Alias, da im Union die Spaltennamen durch den ersten Teil bestimmt werden.
    Also:
    Code:
    Select meineSpalte1, meineSpalte2, meineSpalte3 from <echterTabelle>
    union
    Select meinErsatzwert1, meinErsatzwert2, meinErsatzwert2 from <AbfrageFürdenFallDassImErstenTeilErgebnisLeerIst>
    Gruß, defo

    Comment


    • #17
      Doch, hab ich.... jedoch hab ich join abfrage.....

      tabelle 1 raumdaten ( entweder vorhanden ja/ nein) oder nicht mehr gueltig
      tabelle 2 pcdaten des evtl arbeitenden PC ( wird der raum bearbeitet ist tabelle 1 unwichtig routine bricht ab)

      ich vermutet ich kann nicht einmal beschreiben was ich eigentlich will mmpf...

      habe jetzt das beispiel so angewandt, dass ich einmal für die raumdaten eine abfrage nach unserem muster und eine für die pcdaten nach dem muster habe.

      des ergebnis ist auch ok, die überlegung ist nun ob ich beide in eine abfrage packen kann.
      Daten für den raum:
      Code:
      SELECT bel.raumID, md5( concat( bel.buch, bel.platzID, bel.bel_status ) ) AS md5hash, 
      					    if( md5( concat( bel.buch, bel.platzID, bel.bel_status ) ) = '37eb62340f800d7f9e2f6f6c850860f2', 'ja', 'nein' ) AS gueltig
      					   		FROM `ac_alle_belegung` AS bel
      							WHERE bel.raumID = '$_REQUEST[raumID]' 
      							UNION
      									select *from
      									(SELECT '$_REQUEST[raumID]' , '$_REQUEST[md5]', 'ja')x
      									 
      									WHERE NOT
      									EXISTS (
      
      								SELECT	*
      									FROM `ac_alle_belegung` AS bel
      									LEFT JOIN ac_alle_temp AS temp ON temp.raumID = bel.raumID
      									LEFT JOIN ac_alle_pc AS pc ON pc.pcID = temp.pcID
      									WHERE bel.raumID = '$_REQUEST[raumID]'
      									)
      Daten für den bearbeitenden PC
      Code:
      SELECT Date_Format( temp.arbeitbeginn, '%d.%m.%Y %H:%m:%s' ) AS tag,
      					  if( temp.raumID ='$_REQUEST[raumID]' AND temp.pcID !='$_REQUEST[pcID]' , 'ja', 'nein' ) AS inBearbeitung,
      					    pc.namePC, pc.buero, pc.telefon
                           FROM ac_alle_pc as pc 
                           LEFT JOIN ac_alle_temp as temp ON temp.pcID = pc.pcID
                           WHERE temp.raumID = '$_REQUEST[raumID]'
      					 UNION
      									select * from
      									(SELECT '' , 'nein',3,4,5)x
      									 
      									WHERE NOT
      									EXISTS (
      
      								SELECT	*
      									FROM ac_alle_pc as pc 
      									LEFT JOIN ac_alle_temp as temp ON temp.pcID = pc.pcID
      										WHERE temp.raumID = '$_REQUEST[raumID]'
      									)

      Comment


      • #18
        Originally posted by A.DA View Post
        ich vermutet ich kann nicht einmal beschreiben was ich eigentlich will mmpf...

        des ergebnis ist auch ok, die überlegung ist nun ob ich beide in eine abfrage packen kann.
        Bitte! ..beide in eine abfrage packen.. und dann? Schleife drum und verschicken?
        Auch wenn es Dir schwer fällt, Dein Anliegen zu formulieren. Es dürfte klar sein, dass es viele Wege gibt 2 Abfragen "zusammenzupacken". Dabei können sich sowohl Weg als auch Ergebnis vielfältig unterscheiden.
        Hier wird niemand Deine Frage für Dich formulieren.
        Gruß, defo

        Comment


        • #19
          Ich versuchs mal

          Abfrage 1:

          Prüfung der aufgerufenen Daten. Entweder sind die Daten ok, ungültig da durch anderen bereits bearbeitet oder garnicht vorhanden.
          Darum feste Werte bei leerer Abfrage.....

          Abfrage 2:

          Prüfen ob Datensatz zurzeit durch jemand anderen bearbeitet wird. Wenn ja werden die entsprechenden Daten abgerufen, wenn nein feste Werte.

          Die Abfrage schreiben bildet nicht mein Problem..... dafür aber die festen Werte....

          Mein Problem ist, dass die Abfrage 1 ein leeres Ergebnis liefert und Abfrage 2 nicht, es kann auch sein, dass Abfrage 1 ein Ergebnis liefert und Abfrage 2 nicht.

          Ich probiere es einfach mal aus und melde mich.

          Comment


          • #20
            Code:
            SELECT bel.raumID, md5( concat( bel.buch, bel.platzID, bel.bel_status ) ) AS md5hash, if( md5( concat( bel.buch, bel.platzID, bel.bel_status ) ) = '37eb62340f800d7f9e2f6f6c850860f2', 'ja', 'nein' ) AS gueltig, pc. * , Date_Format( temp.arbeitbeginn, '%d.%m.%Y %H:%m:%s' ) AS tag, if( temp.raumID = '145'
            AND temp.pcID != '34', 'ja', 'nein' ) AS inBearbeitung
            FROM `ac_alle_belegung` AS bel
            LEFT JOIN ac_alle_temp AS temp ON temp.raumID = bel.raumID
            LEFT JOIN ac_alle_pc AS pc ON pc.pcID = temp.pcID
            WHERE bel.raumID = '145'
            UNION 
            SELECT * 
            FROM (
            
            SELECT 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
            )x
            WHERE NOT 
            EXISTS (
            
            SELECT * 
            FROM `ac_alle_belegung` AS bel
            LEFT JOIN ac_alle_temp AS temp ON temp.raumID = bel.raumID
            LEFT JOIN ac_alle_pc AS pc ON pc.pcID = temp.pcID
            WHERE bel.raumID = '145'
            )
            Ich hab das Problem, wenn aus der Belegung ein leerer Datensatz kommt und aus der temp nicht, greift dennoch die Union......

            ich hab keinen Plan ob oder wie ich das abfangen kann.

            Comment


            • #21
              Originally posted by A.DA View Post

              Ich hab das Problem, wenn aus der Belegung ein leerer Datensatz kommt und aus der temp nicht, greift dennoch die Union......
              union greift immer, es fügt stumpf die Ergebnisse der Abfragen aneinander, genau das soll es hier auch tun.

              Wenn das Join Ergebnis der Abfrage nicht ok ist, musst Du das umbauen (left outer, inner, .. join),
              wenn das Ergebnis der (einen, ersten) Abfrage stimmt, übernimmst Du die Join und Where Condition für den "Null case", also die 2. Abfrage.
              Gruß, defo

              Comment


              • #22
                Ich weiß nicht ob ich es erwähnte, ich bin ein Amateur .....
                Aber gut, bin ja kritik-, lernfähig und möchte das schaffen.....

                union greift immer, es fügt stumpf die Ergebnisse der Abfragen aneinander, genau das soll es hier auch tun.
                Das verstehe ich nicht ganz, in der UNION lege ich doch meine alternativ Angaben fest.

                Comment


                • #23
                  Originally posted by A.DA View Post
                  Ich weiß nicht ob ich es erwähnte, ich bin ein Amateur .....
                  Aber gut, bin ja kritik-, lernfähig und möchte das schaffen.....
                  Das verstehe ich nicht ganz, in der UNION lege ich doch meine alternativ Angaben fest.
                  Nimm Dir doch mal bitte eine beliebige Abfrage, wo 3 Datensätze rauskommen, kopier sie- den Abfragetext-, füge sie wieder ein und schreib ein UNION dazwischen.
                  Das gleiche nochmal, diesmal schreibst Du ein UNION ALL dazwischen.

                  Versuch das Ergebnis zu verstehen und ließ Dir mal irgendwo durch, was UNION macht.
                  Gruß, defo

                  Comment


                  • #24
                    [highlight=sql]SELECT buch, belegt_seit, bel_status,raumID
                    FROM ac_alle_belegung
                    WHERE raumID =601
                    UNION ALL
                    SELECT buch, belegt_seit, bel_status,'test'
                    FROM ac_alle_belegung
                    WHERE raumID =601[/highlight]
                    buch belegt_seit bel_status raumID
                    6847 2013-04-22 gesperrt 601
                    7017 2013-12-12 belegt 601
                    6847 2013-04-22 gesperrt test
                    7017 2013-12-12 belegt test
                    er gibt mir den Datensatz doppelt aus, bzw. beide abfragen in eine Ausgabe
                    oder leeres Ergebnis, wenn keine DS vorhanden
                    Zuletzt editiert von A.DA; 21.01.2014, 21:55.

                    Comment


                    • #25
                      Originally posted by A.DA View Post
                      Code:
                      SELECT buch, belegt_seit, bel_status,raumID
                      FROM ac_alle_belegung
                      WHERE raumID =601
                      UNION ALL
                      SELECT buch, belegt_seit, bel_status,'test'
                      FROM ac_alle_belegung
                      WHERE raumID =601

                      er gibt mir den Datensatz doppelt aus, bzw. beide abfragen in eine Ausgabe
                      oder leeres Ergebnis, wenn keine DS vorhanden
                      Du bist echt sparsam!
                      Du erhälst also 1(!) Ergebnis, das aus 2 unabhängigen Mengen zusammengesetzt ist. Du kannst beide Teilabfragen, die diese Mengen bilden, solange verformen, bis sie das zurückgeben, was Du möchtest. Dabei muss nur die Ausgabestruktur eingehalten werden, die durch das erste Statement- vor dem UNION- vorgegeben ist.

                      Also, wie machst Du Dir das nun zunutze in Deinem ursprünglichen Versuch?
                      Hast Du Dir dazu mal ein paar Grundlagen durchgelesen?
                      Gruß, defo

                      Comment


                      • #26
                        Hast Du Dir dazu mal ein paar Grundlagen durchgelesen?
                        ja, hab ich.
                        http://http://dev.mysql.com/doc/refman/5.1/de/union.html

                        irgendwie bleibt der AHA Effekt noch aus. Aber ich bleib am Ball. Danke für die Geduld

                        Comment


                        • #27
                          Code:
                          SELECT bel.raumID, md5( concat( bel.buch, bel.platzID, bel.bel_status ) ) AS md5hash, if( md5( concat( bel.buch, bel.platzID, bel.bel_status ) ) = 'ea34c1fcf02b7ca57c0d578bacf6d2c8', 'ja', 'nein' ) AS gueltig, pc. * , Date_Format( temp.arbeitbeginn, '%d.%m.%Y %H:%m:%s' ) AS tag, if( temp.raumID = '601'
                          AND temp.pcID != '34', 'ja', 'nein' ) AS inBearbeitung
                          FROM `ac_alle_belegung` AS bel
                          LEFT JOIN ac_alle_temp AS temp ON temp.raumID = bel.raumID
                          LEFT JOIN ac_alle_pc AS pc ON pc.pcID = temp.pcID
                          WHERE bel.raumID = '601'
                          UNION 
                          SELECT 600, 'ea34c1fcf02b7ca57c0d578bacf6d2c8', 'ja' , pc. * , Date_Format( temp.arbeitbeginn, '%d.%m.%Y %H:%m:%s' ) AS tag, if( temp.raumID = '601'
                          AND temp.pcID != '34', 'ja', 'nein' ) AS inBearbeitung
                          FROM ac_alle_temp AS temp
                          LEFT JOIN `ac_alle_belegung` AS bel ON bel.raumID = 601
                          LEFT JOIN ac_alle_pc AS pc ON pc.pcID = temp.pcID
                          was für ´ne Geburt.....

                          im oberen Teil kommt bei raumID 600 ein leeres Resultat dann bekomme ich eine Zeile aus dem unteren Statement angezeigt.
                          600.JPG

                          setze ich die raumID auf 601 (2x in tabelle vorhanden) bekomme ich drei zeilen ausgegeben. die Beiden aus dem oberen Statement und eine aus dem unteren.
                          601.JPG

                          Comment


                          • #28
                            Originally posted by A.DA View Post
                            Code:
                            SELECT bel.raumID, md5( concat( bel.buch, bel.platzID, bel.bel_status ) ) AS md5hash, if( md5( concat( bel.buch, bel.platzID, bel.bel_status ) ) = 'ea34c1fcf02b7ca57c0d578bacf6d2c8', 'ja', 'nein' ) AS gueltig, pc. * , Date_Format( temp.arbeitbeginn, '%d.%m.%Y %H:%m:%s' ) AS tag, if( temp.raumID = '601'
                            AND temp.pcID != '34', 'ja', 'nein' ) AS inBearbeitung
                            FROM `ac_alle_belegung` AS bel
                            LEFT JOIN ac_alle_temp AS temp ON temp.raumID = bel.raumID
                            LEFT JOIN ac_alle_pc AS pc ON pc.pcID = temp.pcID
                            WHERE bel.raumID = '601'
                            UNION 
                            SELECT 600, 'ea34c1fcf02b7ca57c0d578bacf6d2c8', 'ja' , pc. * , Date_Format( temp.arbeitbeginn, '%d.%m.%Y %H:%m:%s' ) AS tag, if( temp.raumID = '601'
                            AND temp.pcID != '34', 'ja', 'nein' ) AS inBearbeitung
                            FROM ac_alle_temp AS temp
                            LEFT JOIN `ac_alle_belegung` AS bel ON bel.raumID = 601
                            LEFT JOIN ac_alle_pc AS pc ON pc.pcID = temp.pcID
                            im oberen Teil kommt bei raumID 600 ein leeres Resultat dann bekomme ich eine Zeile aus dem unteren Statement angezeigt.
                            [ATTACH=CONFIG]2117[/ATTACH]

                            setze ich die raumID auf 601 (2x in tabelle vorhanden) bekomme ich drei zeilen ausgegeben. die Beiden aus dem oberen Statement und eine aus dem unteren.
                            [ATTACH=CONFIG]2118[/ATTACH]
                            Ok, fehlt noch was?
                            Dein Statement sieht nicht so aus, als ob es die Ergebnisse produziert, so wie Du sie beschreibst- zumindest nicht für raumID 601, das andere Statement ist ja nicht dargestellt.
                            Was war mit "..not exists.."
                            Gruß, defo

                            Comment


                            • #29
                              Code:
                                                                    SELECT bel.raumID, md5( concat( bel.buch, bel.platzID, bel.bel_status ) ) AS md5hash, 
                              						if( md5( concat( bel.buch, bel.platzID, bel.bel_status ) ) = '$_REQUEST[md5]', 'ja', 'nein' ) AS gueltig, pc. * , 
                              						Date_Format( temp.arbeitbeginn, '%d.%m.%Y %H:%m:%s' ) AS tag, if( temp.raumID = '$_REQUEST[raumID]'
                              						AND temp.pcID != '34', 'ja', 'nein' ) AS inBearbeitung
                              						FROM `ac_alle_belegung` AS bel
                              						LEFT JOIN ac_alle_temp AS temp ON temp.raumID = bel.raumID
                              						LEFT JOIN ac_alle_pc AS pc ON pc.pcID = temp.pcID
                              						WHERE bel.raumID = '$_REQUEST[raumID]'
                              						UNION 
                              						SELECT '$_REQUEST[raumID]', '$_REQUEST[md5]', 'ja' , pc. * , Date_Format( temp.arbeitbeginn, '%d.%m.%Y %H:%m:%s' ) AS tag, if( temp.raumID = '$_REQUEST[raumID]'
                              						AND temp.pcID != '34', 'ja', 'nein' ) AS inBearbeitung
                              						FROM ac_alle_temp AS temp
                              						LEFT JOIN `ac_alle_belegung` AS bel ON bel.raumID = '$_REQUEST[raumID]'
                              						LEFT JOIN ac_alle_pc AS pc ON pc.pcID = temp.pcID
                              						WHERE temp.raumID = '$_REQUEST[raumID]'
                              Ich denke so geht es! Werde es jetzt mal in den vorhandenen Code einsetzen und prüfen ob die Daten so verwertbar sind.

                              not exists, ich hab den join in der zweiten Abfrage umgestellt. Wenn die raumID in der ersten Abfrage Ergebnis = leer ist, dann ist der Datensatz gueltig und in der zweiten Abfrage setze ich die REQUEST Werte an die entsprechenden Positionen.
                              Die zweite Abfrage hab ich im Join umgestellt und frage die PC Daten ab.

                              Somit scheint es, dass ich ohne dieses not exists auskomme.

                              Ich danke Dir tausendmal.......

                              Gruß Arno

                              Ich hoffe es funktioniert und ich hab nichts vergessen

                              Comment


                              • #30
                                zu früh gefreut.....

                                Comment

                                Working...
                                X