Komplizierte mysql abfrage...

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

  • Komplizierte mysql abfrage...

    Hallo leute,

    Ich habe schon endliche Seiten durchgeschaut und bei google habe ich auch nichts gefunden was mir weiter hilft bzw nicht in der Form so das ich das verstehe :S

    Ich habe folgenes problem:

    Ich habe eine datenbank mit 1000 tabellen da muss ich erstmal die tabellen raussuchen die im tabellennamen ein bestimmten sufix stehen haben. Dann muss ich fuer jede gefundene tabelle die datensaetze sumieren bzw den hoesten wert anzeigen oder den niedrrigsten wert anzeigen lassen kommt drauf an fuer welche spalte... nur das ueberfordert mich ein wenig weil ich alle datensaetze im array (assoc) drin hab und nicht weiss wie ich jetzt weiter machen soll...

    Ich lasse jetzt pro tabelle alle datensaetze anzeigen nur sollen nicht alle angezeigt werden sondern nur die maximalen , niedrigsten,durchschnitts werte.. :S
    Zuletzt geändert von tetra; 06.08.2007, 16:12.

  • #2
    komplizierte mysql abfrage...
    ah, und deswegen postest du im PHP-Forum? *verschieb*

    OffTopic:
    Wiederholungsfehler.


    Ich habe eine datenbank mit 1000 tabellen da muss ich erstmal die tabellen raussuchen die im tabellennamen ein bestimmten sufix stehen haben.
    Dann holst du dir erst mal alle Tabellen aus der Datenbank. SHOW TABLES sollte dir da schonmal ganz gute Dienste erweisen.
    Die packste in ein Array und durchläufst es und prüfst auf dieses Prefix. (Kann sein, dass es dafür auch eine fertige array-Funktion gibt.

    Dann muss ich fuer jede gefundene tabelle die datensaetze sumieren bzw den hoesten wert anzeigen oder den niedrrigsten wert anzeigen lassen kommt drauf an fuer welche spalte... nur das ueberfordert mich ein wenig weil ich alle datensaetze im array (assoc) drin hab und nicht weiss wie ich jetzt weiter machen soll...
    Wenn du es nicht schon SQL-Seitig mit MIN() und MAX() machen kannst, dann halt mit PHP. Entsprechende Funktionen gibt es.

    So, jetzt werd erstmal aktiv. und poste erste ansätze. Wir sind hier nicht zum vorkauen...

    OffTopic:
    Auf das vermutlich miese DB-Layout gehe ich an dieser Stelle nicht ein, weil du dazu hoffentlich schon oft genug etwas gehört hast...
    EDIT:
    Ich lasse jetzt pro tabelle alle datensaetze anzeigen nur sollen nicht alle angezeigt werden sondern nur die maximalen , niedrigsten,durchschnitts werte.. :S
    Super Leistung.

    Kommentar


    • #3
      Hi,

      Tabellen auflisten kannst Du mit "SHOW TABLES LIKE...".
      Wenn Du Spalten in Tabellen summieren, Min/Max berechnen usw. willst, empfiehlt es sich, das die Datenbank machen zu lassen, statt alles auszulesen und in einer Schleife rumzurechnen.

      LG

      Kommentar


      • #4
        Tabellen auflisten kannst Du mit "SHOW TABLES LIKE...".
        Das ist natürlich noch besser!

        Kommentar


        • #5
          Eventuell ein VIEW+UNION, aber warum zur Hölle liegen die Daten denn auf Tabellen geclustert und auch noch in Spalten mit unterschiedlichen Namen?...

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            rofl danke erstmal fuer die schnelle antworten... (teilweise lustigen ^^)

            at TobiaZ ^^

            ich habe ja schon alles nur wusste bzw weiss ich nicht genau wie ich alle datensaetze jetzt ggf. summieren soll...

            PHP-Code:
            function tbls(){
            require(
            "config.inc.php");
              
            dbconnect();
              
            $tbls mysql_query("SHOW TABLES LIKE '%".$DB_SUFIX."'");
              
            $num mysql_num_rows($tbls);
              
            $msgtit "Result:";
              
            $msgcon "Found: ".$num." Tables ";
              include(
            "templates/message.tpl");

            // $timestamp = time();
            // $datetime = date("d-m-Y H:i:s",$timestamp);


                
            while ($row mysql_fetch_array($tbls)){
                  
            $qry mysql_query("select * from $row[0]");
                  include(
            "templates/tbl_head.tpl");
                  while (
            $res mysql_fetch_assoc($qry)){
                    
            $timestamp gmdate("d-m-Y H:i:s"$res["TimeStamp"]);
                    
            $rfactor $res["RFactor"];
                    
            $mos $res["MOS"];
                    
            $mlel $res["MaxLossEpisodesLen"];
                    
            $mles $res["MaxLossEpisodes"];
                    
            $nlp $res["NetworkLossProbality"];
                    
            $jitter $res["Jitter"];
                    
            $iseq $res["InSquence"];
                    
            $loss $res["Loss"];
                    include(
            "templates/tbl_content.tpl");
                  }
                  include(
            "templates/tbl_footer.tpl");
                }

            das was ich bisher geschaffen habe....
            Zuletzt geändert von tetra; 06.08.2007, 16:30.

            Kommentar


            • #7
              Naja das isses doch schon fast. Statt

              select * from $row[0]
              while (...) { }

              jetzt nur noch MIN()/MAX() einbauen und Feierabend machen.

              Kommentar


              • #8
                Original geschrieben von onemorenerd
                [...]Statt

                select * from $row[0]
                while (...) { }

                [...]
                meinst du statt

                select * from $row[0]
                eine while schleife?
                while (...) { }

                hab grad irgendwie blackout oO oder bin einfach begriffsstuzig...

                Hab ja ueber dem query "select * from $row[0]" einen query der mit die anzahl der tabellen angibt bzw die namen... die beutzt ich dann um an die datensaetze der jeweiligen tabellen ranzukommen...

                muss ich jetzt anstatt * , max(feldname) eingeben und das wars?

                Kommentar


                • #9
                  Hi,
                  muss ich jetzt anstatt * , max(feldname) eingeben und das wars?
                  Zum Beispiel. Oder AVG, SUM,... was immer Du berechnen willst.

                  LG

                  Kommentar


                  • #10
                    Und weil die Aggregatfunktionen allesamt nur einen einzigen Wert zurückgeben, entfällt die innere While-Schleife. Dass wollte ich da oben sagen. Sorry, wenn es zu undeutlich war.

                    Kommentar


                    • #11
                      ah ok vielen dank, werd es mal ausprobieren...

                      Ah ok ich verstehe ich waehle die datenbank aus und lasse dann anch dem maximal wert von"felname" suchen.... oder lasse den durchschnitt vom "feldnamen" berechnen dafuer brauch ich nicht alle datensaetze raushohlen und einzelnt sumieren oder sonst was...

                      nur leider funktioniert das nicht richtig oder ich mach wieder etwas falsche -.-

                      PHP-Code:
                      $qry mysql_query("select MAX(Jitter) from $row[0]"); 

                      der query sollte doch richtig sein oder nicht?
                      Zuletzt geändert von tetra; 06.08.2007, 16:45.

                      Kommentar


                      • #12
                        Lies bitte die Regeln und befolge sie!

                        Was gibt mysql_error zurück? wie sieht die Query aus?

                        echo "select MAX(Jitter) from $row[0]";

                        Und funktioniert nicht ist keine Fehlerbeschreibung!

                        Kommentar


                        • #13
                          Sorry, aber ich habe die Query gepostet und wuerde mein code mir auch einen error ausgeben wuerde ich ihn euch auch mitteilen!

                          Anscheinend funktioniert es aber es wird nichts ausgebenen...

                          Wenn ich im query max(feldname) schreibe dann kann ich diesen wert doch mit

                          PHP-Code:
                          $res["feldname"]; 
                          ausgeben lassen oder irre ich mich da?

                          *edit

                          wenn ich den query so schreibe wie vorhin
                          PHP-Code:
                          $qry mysql_query("select * from $row[0]"); 
                          dann aber beim ausgeben
                          PHP-Code:
                           $jitter max($res["Jitter"]); 
                          dann kommt ein fehler

                          Code:
                          Warning: Wrong parameter count for max() in C:\xampp\htdocs\test\qry\inc\function.inc.php on line 48
                          Das feld hat den datentyp int unsigned
                          Zuletzt geändert von tetra; 06.08.2007, 16:54.

                          Kommentar


                          • #14
                            var_dump($res);

                            SELECT MAX(Jitter) AS jitter FROM ...

                            Kommentar


                            • #15
                              Sorry, aber ich habe die Query gepostet
                              Nein, du hast einen Stück PHP-Code gepostet. Wofür mache ich mir eigentlich die Mühe und schreibe dir auch noch, welchen Code du für die Testausgabe verwenden sollst???

                              Wenn ich im query max(feldname) schreibe dann kann ich diesen wert doch mit $res["feldname"]; ausgeben lassen oder irre ich mich da?
                              Nein natürlich nicht!
                              select max(feldname) feldname
                              würde gehen

                              Kommentar

                              Lädt...
                              X