xpfreund: Anzeige Sql-Daten dynamisch als Tabelle

Hallo,

Kurze Frage: Ich will eine unbestimmte Zahl an Spalten aus Sql holen und diese
in einer Schleife mit mysql_fetch_row Zeile für Zeile auslesen. Jetzt will ich die Ausgabe auch noch komplett variabel machen, damit gewährleistet ist, das egal wie viele Spalten selektiert wurden, alle Datensätze angezeigt werden. Jetzt kann ich in einer For-Schleife bis zur Anzahl der möglichen Spalten zählen lassen und alle ausgeben. Wenn sie leer sind oder nicht existieren, werden sie vom Browser ja nicht angezeigt. Der Nachteil bei dieser Methode ist, dass er immer bis zum Ende durchzählt. Wäre es möglich bspw. mit while ne Abfrage zu bauen, die den "$row"-Parameter automatisch hochzählt und beim letzten verfügbaren aufhört? Es kann auch mal sein, dass eine Spalte leer ist.

gruß aus Senftenberg am See

  1. hi,

    Kurze Frage: Ich will eine unbestimmte Zahl an Spalten aus Sql holen und diese
    in einer Schleife mit mysql_fetch_row Zeile für Zeile auslesen. Jetzt will ich die Ausgabe auch noch komplett variabel machen, damit gewährleistet ist, das egal wie viele Spalten selektiert wurden, alle Datensätze angezeigt werden.

    Was hat denn die Anzahl selektierter Spalten mit der Anzahl Datensätze zu tun?

    Jetzt kann ich in einer For-Schleife bis zur Anzahl der möglichen Spalten zählen lassen und alle ausgeben. Wenn sie leer sind oder nicht existieren, werden sie vom Browser ja nicht angezeigt. Der Nachteil bei dieser Methode ist, dass er immer bis zum Ende durchzählt.

    Und bis wo soll "er" sonst "zählen"?

    Wäre es möglich bspw. mit while ne Abfrage zu bauen, die den "$row"-Parameter automatisch hochzählt und beim letzten verfügbaren aufhört?

    Welchen Parameter willst du hochzählen, und warum?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo,

      <code lang=php>
      echo "<table>";
      $daten = mysql_query("select ".DB_PREFIX."todo.ID, remark,".DB_PREFIX."todo.anfang, deadline, ".DB_PREFIX."contacts.nachname
                               //von den Tabellen
        while ($spaltee = db_fetch_row($result3)) { //Datensatz für Datensatz
          echo "<tr>";
          for($count = 1; $count < 8; $count++) //8 = Anzahl möglicher Spalten,count wird hochgezählt, um die jeweilige Reihe auszugeben
          {
          if ($spalte[$count] != '') echo "<td>".$spalte[$count]."</td>";
              }
          echo "</tr>\n";
       }
        echo "</table>\n";
      </code>
      Das finde ich aber nicht sehr schlau in der for-Schleife bis irgendwann zu zählen. Besser wäre es doch, wenn die Schleife nur solang zählt, bis keine Spalte für den Datensatz existiert, d. h. wenn ich drei Spalten oben auswähle, soll die Datenanzeige der jeweiligen Spalte bei $spalte[3] aufhören und nicht wie im obigen Bsp. bis $spalte[8] weiterversuchen. Es kann passieren, das für einen Datensatz mal in einer Spalte nichts drin steht, daher fällt die Möglichkeit aus, abzufragen, ob was drin steht.

      gruß aus Senftenberg am See

      1. hi,

        Das finde ich aber nicht sehr schlau in der for-Schleife bis irgendwann zu zählen. Besser wäre es doch, wenn die Schleife nur solang zählt, bis keine Spalte für den Datensatz existiert,

        Ja warum denn dann überhaupt for?
        Lass dir ein Array zurückliefern, und nutze foreach.

        d. h. wenn ich drei Spalten oben auswähle, soll die Datenanzeige der jeweiligen Spalte bei $spalte[3] aufhören

        Du meinst vermutlich 2 - zu zählen begonnen wird bei 0.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hallo!

    Kurze Frage: Ich will eine unbestimmte Zahl an Spalten aus Sql holen und diese anzeigen ....

    Du hast also ein beliebiges SQL Select Statement und möchtest das als Tabelle ausgeben? OK.

    zb Select * from meineTabelle
    Die Schleife die das Ergebnis ausgeben soll weiß aber nicht welche und wieviele Spalten das Ergebnis hat? Kein Problem.
    Alles das du brauchst ist hier beschrieben.

    Du holst dir mit mysql_query ein Resultset und gehst es anschl. in einer while Schleife mit mysql_fetch_array durch.

    In der While Schleife hast du eine For Schleife von 0 bis mysql_num_fields und gibst die Werte der Spalten einfach mit dem Recordset das mysql_fetch_array zurückliefert aus.

    Im ersten while Durchlauf kannst du noch einen Tabellenheader mit den Namen der Spalten ausgeben. Dazu verwendest du mysql_field_name.

    Viel Spaß beim Programmieren!

    mfg
      frafu

    1. Hallo,

      Hat sich schon erledigt. Ich habe einfach bei der bestehenden Abfrage, die inzwischen unten beschrieben ist, statt der 8 die Variable $zahl eingeschrieben, die ich vorher mit deiner Hilfe (mysql_num_fields) definiert hatte.

      gruß aus Senftenberg am See

      1. Hallo!

        Hat sich schon erledigt. Ich habe einfach bei der bestehenden Abfrage, die inzwischen unten beschrieben ist, statt der 8 die Variable $zahl eingeschrieben, die ich vorher mit deiner Hilfe (mysql_num_fields) definiert hatte.

        Vergiss nicht bei 0 zu zählen zu beginnen und nicht bei 1.

        mfg
          frafu