und wieder eine Schleife

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

  • und wieder eine Schleife

    Hallo,

    ich habe bei meiner suche nichts gefunden... Es geht darum werte aus einer DB auszulesen und die Anzal an der gefüllten Felder zurück geben soll. Dabei handelt es sich jeweils um das erste Feld von 3 Tabellen
    hz1 // Hauptanzeige Tabelle 1
    hz2 // Hauptanzeige Tabelle 2
    hz3 // Hauptanzeige Tabelle 3

    Da später Tabellen hinzu kommen wollte ich dieses dynamisch gestallten

    PHP-Code:
    $table 1;
    $hz 'hz'.$table;

    do{
    $hz 'hz'.$table;
    $table++;
    } while(
    $row_anzeige[$hz] != NULL OR $row_anzeige[$hz] != ''); 
    Es funktioniert aber nicht, wenn in allen 3 Feldern etwas steht gibt er mir eine 4 aus, steht in 2 Feldern etwas drin bekomme ich 1 als ergebniss.

    weis jemand wie man soetwas gestallten muss?

    Vielen Dank im Voraus...
    Josh
    Zuletzt geändert von Harlekin; 28.01.2004, 12:02.

  • #2
    Hallo,
    dies kannst du doch bequem per SQL machen. Du brauchst dafür nicht die ganzen Datensätze durchzugehen.
    Sollte in etwa so gehen:
    PHP-Code:
    SELECT COUNT(TAB_NAMEFROM TABELLE WHERE TABFELD IS NOT NULL 
    mfg
    Günni


    Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
    Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
    Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
    City-Tiger - Online durch die Straßen tigern...

    Kommentar


    • #3
      Hi,

      schon ja, es müssen aber eben bestimmte Felder sein die abgefragt werden müssen da diese zu einer dynamischen seitenerstellung beitragen.

      Es sind die Spallten "hs1" - "hs3", skh1s1z1 -skh1s8z1 sowie h1z1-h1h1z5-.

      Anhand dieser rückgabewerte wird ein Frame erstellt Da die Tabelle später erweitert wird soll diese schleife gesetzt werden damit später keine umprogramierung erforderlich ist.

      Grüße Josh
      Zuletzt geändert von Harlekin; 28.01.2004, 13:28.

      Kommentar


      • #4
        Sonst niemand eine Idee?

        Grüße Josh

        Kommentar


        • #5
          Und auf welche Werte möchtest du diese Spalten prüfen??? Immer nur ob Sie leer sind??? Falls ja, könntest du mehrere IS NOT NULL bedingungen in dem SQL-Statment machen...
          mfg
          Günni


          Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
          Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
          Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
          City-Tiger - Online durch die Straßen tigern...

          Kommentar


          • #6
            Hallo,

            schon ja, immer nur ob diese !='' sind oder != NULL. Damit wenn in den Feldern etwas drinsteht der Zähler um 1 erhöt wird, somit bekomm ich eben raus wieviele Haupttabellen (hz oder h) ich habe, und in den Haupttabellen die Spallten (s) und die Zeilenanzahl (z). So wie es unten ist ist die konstruktion momentan, diese ist aber Statisch, da jedes Feld einer Variablen zugewiesen wird. Die soll aber auf einer dynamischen Ebene geschehen, daher die überlegung im ersten Thread
            PHP-Code:
            $haupt1 $row_Anzeige['hz1'];
            $haupt2 $row_Anzeige['hz2'];

            etc...

            $spallten1 $row_Anzeige['h1sk1'];     
            $spallten2 $row_Anzeige['h1sk2'];

            etc...  dann

            if ($haupt1 != NULL OR $haupt1 != '')                
            {
                
            $hauptzähler++;
            }

            if (
            $haupt2 != NULL OR $haupt2 != '')        
            {
            $hauptzäler++;
            }
            .... 
            Grüße Josh

            Kommentar


            • #7
              Und genau dies kannst du mit einem SQL Stament machen das schon bei dem Auslesen der Daten in der DB prüft ob die Felder NULL oder Leer sind.
              Die Anzahl kannst entweder mit mysql_num_rows oder mit einem Count Befehl im Statment herausfinden...
              mfg
              Günni


              Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
              Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
              Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
              City-Tiger - Online durch die Straßen tigern...

              Kommentar


              • #8
                Also ich steh da wohl auf dem Schlauch,

                wenn ich die Felder die zu überprüfen im Statement angebe ist das doch wieder Statisch....? Er soll ja NICHT ALLLE prüfen sondern nur bestimmte !!!

                Wie sieht den so ein Prüfstatment für z.B. die Felder tabelle1.hz1 und tabell2.hz2 Statment aus? Die count funktion check ich....

                Grüße Josh

                Kommentar


                • #9
                  Die Tabellenname sind ja immer die gleichen. Also daher ist dies wie folgend:
                  PHP-Code:
                  SELECT COUNT(TAB_NAMEFROM TABELLE WHERE tabelle1.hz1 IS NOT NULL AND tabelle1.hz1 != "" AND tabell2.hz2 IS NOT NULL AND tabell2.hz2 != "" 
                  mfg
                  Günni


                  Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
                  Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
                  Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
                  City-Tiger - Online durch die Straßen tigern...

                  Kommentar


                  • #10
                    Danke erstmel, aber das hab ich mir schon fast gedacht, das wird dann zu lange, da ich diese

                    (SYNTAX DER FELDNAMEN:
                    hz$ = Hauptanzeige die auch die Tabelle definiert, sk =Spalltenkopf, h$ = definert die Tabelle, s$= die Spalte, z$ die Zeile)

                    PHP-Code:
                    $table_1 $row_anzeige['hz1'];    #// Hauptanzeige in Tabelle dates
                    $table_2 $row_anzeige['hz2'];    #// Hauptanzeige in Tabelle dates_1
                    $table_3 $row_anzeige['hz3'];    #// Hauptanzeige in Tabelle dates_2

                    $table_1_spallte_1$row_anzeige['skh1s1']; #// Spalltenkopf 1 in dates
                    $table_1_spallte_2$row_anzeige['skh1s1'];
                    $table_1_spallte_3$row_anzeige['skh1s1'];
                    $table_1_spallte_4$row_anzeige['skh1s1'];
                    $table_1_spallte_5$row_anzeige['skh1s1'];
                    $table_1_spallte_6$row_anzeige['skh1s1'];
                    $table_1_spallte_7$row_anzeige['skh1s1'];
                    $table_1_spallte_8$row_anzeige['skh1s1'];
                    $table_2_spallte_1$row_anzeige['skh2s1']; #// Spalltenkopf 1 in dates_1
                    $table_2_spallte_2$row_anzeige['skh2s2'];
                    $table_2_spallte_3$row_anzeige['skh2s3'];
                    $table_2_spallte_4$row_anzeige['skh2s4'];
                    $table_2_spallte_5$row_anzeige['skh2s5'];
                    $table_2_spallte_6$row_anzeige['skh2s6'];
                    $table_2_spallte_7$row_anzeige['skh2s7'];
                    $table_2_spallte_8$row_anzeige['skh2s8'];
                    $table_3_spallte_1$row_anzeige['skh2s1']; #// Spalltenkopf 1 in dates_2
                    $table_3_spallte_2$row_anzeige['skh2s2'];
                    $table_3_spallte_3$row_anzeige['skh2s3'];
                    $table_3_spallte_4$row_anzeige['skh2s4'];
                    $table_3_spallte_5$row_anzeige['skh2s5'];
                    $table_3_spallte_6$row_anzeige['skh2s6'];
                    $table_3_spallte_7$row_anzeige['skh2s7'];
                    $table_3_spallte_8$row_anzeige['skh2s8'];
                    $table_1_zeile_1$row_anzeige['h1z1'];   #// Zeile 1 in dates
                    $table_1_zeile_2$row_anzeige['h1z2'];
                    $table_1_zeile_3$row_anzeige['h1z3'];
                    $table_1_zeile_4$row_anzeige['h1z4'];
                    $table_1_zeile_5$row_anzeige['h1z5'];
                    $table_2_zeile_1$row_anzeige['h2z1'];   #// Zeile 1 in dates_1
                    $table_2_zeile_2$row_anzeige['h2z2'];
                    $table_2_zeile_3$row_anzeige['h2z3'];
                    $table_2_zeile_4$row_anzeige['h2z4'];
                    $table_2_zeile_5$row_anzeige['h2z5'];
                    $table_3_zeile_1$row_anzeige['h3z1'];  #// Zeile 1 in dates_2
                    $table_3_zeile_2$row_anzeige['h3z2'];
                    $table_3_zeile_3$row_anzeige['h3z3'];
                    $table_3_zeile_4$row_anzeige['h3z4'];
                    $table_3_zeile_5$row_anzeige['h3z5']; 
                    Variablen alle abfragen muss. Die variablen sollen dann mittels Prüfung auf NULL oder '' geprüft werden und die entsprechenden zäler wie je nach Wert erhöt werden... Wenn jetzt ein neues Feld in der DB generiert wird muss dies dann wieder in dem Statment geändert werden. Daher auch die frage wie ich das dynamisch gestallten kann...
                    Das ganze müste sich doch in 3 oder 4 Schleifen gestallten lassen ?

                    Grüße Josh
                    Zuletzt geändert von Harlekin; 28.01.2004, 17:44.

                    Kommentar


                    • #11
                      Du kannst ja die Abfrage einfach dynamisch erstellen. Dann brauchst du nicht so viele schleifen machen und es ist performanter, da es die DB prüfen muss...
                      mfg
                      Günni


                      Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
                      Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
                      Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
                      City-Tiger - Online durch die Straßen tigern...

                      Kommentar


                      • #12
                        Kannst du mir ein Beispiel nennen ? Mein Ansatz für das was ich glaube das du meinst:

                        PHP-Code:
                        mysql_select_db($database_Axel$Axel);
                        $query_anzeige "SELECT * FROM dates, dates_1, dates_2";
                        $anzeige mysql_query($query_anzeige$Axel) or die(mysql_error());
                        $row_anzeige mysql_fetch_assoc($anzeige);
                        $totalRows_anzeige mysql_num_rows($anzeige);

                        $table 1;
                        $hzanz 'hz'.$table;
                        for(
                        $x=0;;$x++){
                            if(
                        $row_anzeige[$hzanz] == NULL OR $row_anzeige[$hzanz] == '') {
                                break;
                                } 
                            
                        $table++;
                            
                        $hzanz 'hz'.$table;
                            } 
                        Dadurch liest er mir die Spallte aus erhöt den Wert von $table, wenn jetzt das nächste Feld leer ist oder nicht vorhanden ist müsste er abbrechen. Beim Testen gibt er mir aber nur den wert 1 zurück obwohl in hz1 und hz2 etwas drinsteht. Was mich auch verwundert ist das er mir wenn ich vor der Schleife einen echo Befehl auf eine Spallte setze, echo $row_anzeige['hz1'] Wird mir dieser nicht angezeigt, nur wenn ich in der SELECT -Anweisung dates_1 u. dates_2 lösche. Die Feldnamen sind nicht dopplet vergeben oder so...
                        Grüße Josh
                        Zuletzt geändert von Harlekin; 28.01.2004, 20:24.

                        Kommentar


                        • #13
                          Keiner eine idee wieso das so ist?

                          Kommentar


                          • #14
                            Formulieren wir die frage mal anders, vieleicht klaps ja so...

                            Wie kann ich diese Struktur
                            PHP-Code:

                             $haupt1 
                            $row_Anzeige['hz1'];
                            $haupt2 $row_Anzeige['hz2'];

                            etc...

                            $spallten1 $row_Anzeige['h1sk1'];     
                            $spallten2 $row_Anzeige['h1sk2'];

                            etc...  dann

                            if ($haupt1 != NULL OR $haupt1 != '')                
                            {
                                
                            $hauptzähler++;
                            }

                            if (
                            $haupt2 != NULL OR $haupt2 != '')        
                            {
                            $hauptzäler++;
                            }
                            .... 
                            in so eine Struktur

                            PHP-Code:
                            $table 1;
                            $hzanz 'hz'.$table;
                            for(
                            $x=0;;$x++){
                                if(
                            $row_anzeige[$hzanz] == NULL OR $row_anzeige[$hzanz] == '') {
                                    break;
                                    } 
                                
                            $table++;
                                
                            $hzanz 'hz'.$table;
                                } 
                            Ich denke mal das meine Überlegung nicht ganz falsch ist allerdings

                            ... liest er mir die Spallte aus erhöt den Wert von $table, wenn jetzt das nächste Feld leer ist oder nicht vorhanden ist müsste er abbrechen. Beim Testen gibt er mir aber nur den wert 1 zurück obwohl in tabel.hz1 und table_1.hz2 etwas drinsteht. Was mich auch verwundert ist das er mir wenn ich vor der Schleife einen echo Befehl auf eine Spallte setze, echo $row_anzeige['hz1'] Wird mir dieser nicht angezeigt, nur wenn ich in der SELECT -Anweisung dates_1 u. dates_2 lösche. Die Feldnamen sind nicht dopplet vergeben oder so...

                            Kommentar


                            • #15
                              LÖSUNG

                              Nach weiterm Kopfzerbrechen ohne hilfe ...
                              für alle die es interessiert was ich in meinen Threads gemeint hab....
                              PHP-Code:

                              $hznr
                              1;
                              $hzanz 'hz'.$hznr;
                              for(
                              $x=0;;$x++){
                                  if(isset(
                              $row_anzeige[$hzanz])) {
                                      
                              $hznr++;
                                          
                              $hzanz 'hz'.$hznr;
                                      } else {
                                      break;
                                          }
                                  } 

                              Kommentar

                              Lädt...
                              X