Abfrage??? Array???

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    nein.
    http://sqlzoo.net/howto/source/z.dir/tip962219/db2

    Kommentar


    • #17
      so, wie es dort auf dem link angeben wird, so mache ich es doch auch! Oder gibts da einen Unterschied. Ich kann da keinen erkennen??

      Kommentar


      • #18
        du sollst auf den button klicken, auf dem der datenbankname steht, der dich interessiert.

        Kommentar


        • #19
          soory, hat sich erledigt, hab nicht auf den entsprechenden Button geklickt. Ich probier es mal aus

          Kommentar


          • #20
            Die Abfrage funktioniert so wunderbar. Aber ich hab ein neues Problem diesbezüglich.

            Ich möchte mir die Anzahl der Aufträge nach dem jeweiligen Monat im Jahr gruppiert ausgeben lassen.

            Ich geh wie folgt vor, was aber zu keiner Lösung führt.

            Select firma, To_CHAR(auftragsdatum,'MM / YYYY') jahr, count(TO_CHAR(LFZ_BEGINN,'MM / YYYY')) from tblFirma, tblAuftrag
            group by To_CHAR(auftragsdatum,'MM / YYYY')


            Was mache ich da falsch?

            und wenn ich es nach dem datum sortiert ausgeben lassen möchte, dann sortiert gebe ich folgendes ein, was aber falsch, ist da er den String sortiert:

            order by To_CHAR(auftragsdatum,'MM / YYYY')

            wenn ich nur:

            order by auftragsdatum

            eingebe, dann erhalte ich folgende Fehlermeldung:

            >[Error] Script lines: 1-9 --------------------------
            ORA-00979: not a GROUP BY expression 
            Zuletzt geändert von mobo81; 09.03.2006, 08:35.

            Kommentar


            • #21
              OffTopic:
              Braucht es ein Forum für Programmlogik? maW das würde in jeder beliebigen bekannten Programmiersprache, nicht nur in SQL/Oracle nicht das gewünschte Resultat geben.

              Kommentar


              • #22
                ja schlaumeier, dann sag mir doch was ich falsch mache, anstatt schlau sprüche abzugeben.

                Kommentar


                • #23
                  Du könntest meinen früheren Vorschlag, einfach von MySql nach Oracle angepasst, versuchen. Die Gegenfrage ist noch, ob du das für Geld machst, oder in Ausbildung, oder in Deiner Freizeit. Im Dritten Fall würde ich Dir noch helfen (aber dann hättest du kein Orakel).

                  added: Die Abschnitte , die zu lesen wären, wurden auch schon angegeben, allerdings für MySQL. Es würde mich doch sehr wundern, wenn das im Oracle nicht gleichermassen stehen würde. Zu Month() usw hat Dir schon 'penizillin' die info geliefert.
                  Zuletzt geändert von globqluqqlo; 09.03.2006, 12:53.

                  Kommentar


                  • #24


                    ORA-00979: not a GROUP BY expression
                    Du gruppierst nicht nach allen single cols in deinem query. Bei oracle ist das unabdingbar.
                    Zuletzt geändert von MelloPie; 09.03.2006, 20:40.
                    Beantworte nie Threads mit mehr als 15 followups...
                    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                    Kommentar


                    • #25
                      EDIT:
                      ich schrieb:
                      SELECT firma, count(1) AS count, month(datum) AS monat, year(datum) AS jahr
                      FROM tabelle
                      GROUP BY firma, monat, jahr;


                      mobo81 schrieb:
                      ja schlaumeier, dann sag mir doch was ich falsch mache, anstatt schlau sprüche abzugeben
                      Das select funktioniert genau so (MYSQL), ich habe es unter dem heading: MEIN ERSTES PHP-DB SCRIPT ausprobiert (kein Witz).

                      Dann habe ich noch eine Frage, wenn ich die Felder als Tabelle mit foreach ausgebe, und die Tabellenheaders mit for (i), wie muss man es machen, damit die Tabellenheaders zu den Datenspalten passen ('firma' über der Spalte firma usw.) und die headers nicht anders angeordnet sind als die Daten? Geht das zuverlässig mit foreach und for gemischt?
                      PHP-Code:
                          echo '<table>';
                        echo 
                      '<tr>';
                        for (
                      $i=0$i<$feldanzahl$i++)
                          echo 
                      '<th>' mysql_feld_name ($rs$i) . '</th>';

                        while (
                      $row mysql_fetch_array ($rs)) {
                          echo 
                      '<tr>';
                          foreach (
                      $row as $key=>$value)
                            echo 
                      '<td>' $value '</td>';
                         }
                      #row
                         
                      echo '</table>'

                      Kommentar


                      • #26
                        Original geschrieben von globqluqqlo
                        Dann habe ich noch eine Frage, wenn ich die Felder als Tabelle mit foreach ausgebe, und die Tabellenheaders mit for (i), wie muss man es machen, damit die Tabellenheaders zu den Datenspalten passen ('firma' über der Spalte firma usw.) und die headers nicht anders angeordnet sind als die Daten? Geht das zuverlässig mit foreach und for gemischt?
                        foreach durchläuft die Elemente eines Arrays in der Reihenfolge, in der sie im Speicher vorliegen.

                        Wenn also deine Funktion mysql_feld_name() sie in der gleichen Reihenfolge zurückliefert, wie die Spalten im Select ausgewählt wurden, dann sehe ich da kein Problem. (Bei SELECT * eigentlich auch nicht - aber das macht man ja eigentlich nicht ...)

                        Alternativ könnte man auch mysql_feld_name() so aufbauen, dass sie gleich die Spaltennamen als Array zurückliefert - das könnte man dann ebenfalls mit foreach durchlaufen.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #27
                          Hier noch die Lösung, in mySQL, mit veränderlichem von- und bis-Monat, und die Kunden, wo keine Aufträge sind, fehlen nicht einfach, sondern geben null. Dafür braucht es zwei LEFT JOINS.
                          PHP-Code:
                          $query 'SELECT 
                                  kunde.firma as firma, count(verkauf.datum) AS count,
                                      MONTH(kalender.datum) AS monat,
                                      YEAR(kalender.datum) as jahr 
                                  FROM `kunde`
                                  LEFT JOIN `kalender` ON true
                                  LEFT JOIN `verkauf` 
                                      ON year(kalender.datum)=year(verkauf.datum) 
                                  AND month(kalender.datum)=month(verkauf.datum) AND kunde.firma=verkauf.firma
                                  WHERE MONTH(kalender.datum)>=' 
                          sqsan($vonmonat) .
                                    
                          ' AND MONTH(kalender.datum)<=' sqsan($bismonat) . 
                                    
                          ' GROUP BY jahr, monat, firma'

                          Kommentar


                          • #28
                            Dann habe ich erneut eine tail-question. Wie konvertiert man in PHP "\x1A" in '\z' für mySQL? (dh ohne mysql_real_escape_string(), aber auch ohne addcslashes()) und möglichst schwungvoll?

                            Kommentar


                            • #29
                              PHP-Code:
                              $in '\x1A';
                              $out '\z'.chr(hexdec(substr($in2))+96); 
                              (Quote mich - das Forum frißt die Backslashes)

                              Kommentar


                              • #30
                                onemorenerd half mir mit
                                $in = 'x1A';
                                $out = '\''.chr(hexdec(substr($in, 2))+96);

                                Danke vielmals (Backslashes im php gehen tatsächlich nicht)
                                Zuletzt geändert von globqluqqlo; 11.03.2006, 17:35.

                                Kommentar

                                Lädt...
                                X