andreas: unterschiedliche Darstellung in einer Schleife

Hallo

ich habe ein DB Select aus dem ich aus einer Tabelle Daten per select und
per

$themen = mysql_query("SELECT titel,themen  from $table");

while ($zeile = mysql_fetch_array($themen))
{
echo $zeile["datensatz"].<br>";
}

ausgebe

kann ich ohne eine weiteren Select,
die Daten unterschiedlich darstellen lassen.

z.B. die ersten 3 Datesätze sollen noch den dazugehörigen Inhalt mit
angeiget bekommen

nich nächsten 6 Datensätze soll nur der Titel zu sehen sein

geht das und wenn ja wie und womit?

Andreas

  1. Hallo Andreas,

    $themen = mysql_query("SELECT titel,themen  from $table");

    while ($zeile = mysql_fetch_array($themen))
    {
    echo $zeile["datensatz"].<br>";
    }

    Das kann so sowieso nicht funktionieren, Du rufst ein Feld auf, daß im select nicht drin ist ("datensatz").
    Wenn Du die ersten Einträge anders darstellen willst:

    $currentrownum=0;
    while ($zeile = mysql_fetch_array($themen))
    {
       if($currentrownum<4)
       {

    }else

    echo $zeile["datensatz"].<br>";
       $currentownum++;
    }

    1. Hallo Andreas,

      sorry, ich habe aus Versehen die "Enter"-Taste berührt:

      $themen = mysql_query("SELECT titel,themen  from $table");

      while ($zeile = mysql_fetch_array($themen))
      {
      echo $zeile["datensatz"].<br>";
      }

      Das kann so sowieso nicht funktionieren, Du rufst ein Feld auf, daß im select nicht drin ist ("datensatz").
      Wenn Du die ersten Einträge anders darstellen willst:

      $currentrownum=0;
      while ($zeile = mysql_fetch_array($themen))
      {
         if($currentrownum<4)
         {
            echo $zeile["titel"]."<br>".$zeile["themen"];
         }else
         {
            echo $zeile["titel"]."<br>";
         }
         $currentrownum++;
      }

      Viele Grüße
      Stephan

      1. Hallo Stephan,

        Du hast es ja schon ausformuliert. Da würde ich aber noch eine kleine Anmerkung loswerden. Die Zählerincrementierung steht rein formal an der falschen Stelle.

        Das kann so sowieso nicht funktionieren, Du rufst ein Feld auf, daß im select nicht drin ist ("datensatz").
        Wenn Du die ersten Einträge anders darstellen willst:

        $currentrownum=0;
        while ($zeile = mysql_fetch_array($themen))
        {

        $currentrownum++;
              if($currentrownum<=3)  // Das war die Aufgabenstellung

        {
              echo $zeile["titel"]."<br>".$zeile["themen"];
           }else
           {
              echo $zeile["titel"]."<br>";
           }

        //    $currentrownum++;

        /*
        hier ist es zu spät, den Zähler zu erhöhen, da dann die zugehörige Zeile schon ausgegeben wurde. Man würde das bei dieser Aufgabe zwar nicht merken, aber durch Ungenauigkeit in der Programmierung sind schon Raketen abgestürzt.
        */

        }

        Viele Grüße

        Tom

        1. Hallo Thomas,

          Du hast es ja schon ausformuliert. Da würde ich aber noch eine kleine Anmerkung loswerden. Die Zählerincrementierung steht rein formal an der falschen Stelle.

          In diesem Fall gibt es keine "falsche Stelle", die Inkrementierung der Zählers am Ende der Schleife vorzunehmen, ist Usus. Notfalls muß man das if-Statement halt um 1 dekrementieren, aber praktisch macht das keinen Unterschied (beide Möglichkeiten sind zumindest turing-äquivalent). Oder warum denkst Du (genau & begründet ;-)), daß es die falsche Stelle ist?

          Viele Grüße
          Stephan

          1. Hallo Thomas,

            In diesem Fall gibt es keine "falsche Stelle", die Inkrementierung der Zählers am Ende der Schleife vorzunehmen, ist Usus. Notfalls muß man das if-Statement halt um 1 dekrementieren, aber praktisch macht das keinen Unterschied (beide Möglichkeiten sind zumindest turing-äquivalent). Oder warum denkst Du (genau & begründet ;-)), daß es die falsche Stelle ist?

            Hi Stephan,

            ist doch klar:
            Stell Dir vor, die Würdest die Ausgabe als Prozedur oder Funktion auslagern und den Schleifenzähler als Parameter übergeben. Dann würde die Funktion die falsche Zeilennummer ausgeben.

            Darum habe ich gemeint, wehret den Anfängen...

            Hier ist das Ganze ja noch überschaubar, aber in größeren Konstrukten kommt es schon darauf an, die _richtige_ Reihenfolge einzuhalten.

            Gruß

            Tom

            1. Hallo Thomas,

              Hier ist das Ganze ja noch überschaubar, aber in größeren Konstrukten kommt es schon darauf an, die _richtige_ Reihenfolge einzuhalten.

              Wenn ich sie ausgeben würde, würde ich halt echo $currentrownum+1 hinschreiben.  Nach Deiner Argumentation wäre ja eine for-Schleife (for($i=0;$i<10;$i++) falsch konstruiert, daß $i++ wird ja auch am Ende ausgeführt.
              Man zählt üblicherweise in Programmiersprachen von 0 bis x-1, nicht von 1 bis x (z.B. auch bei Arrays).

              Viele Grüße
              Stephan

              1. Hallo Stephan,

                [mir fehlen da die Worte]

                Gruß
                Tom

                PS:Ich hoffe nur, dass Du keine Programme für die raumfahrt oder die Atomtechnik schreibst, wo es auf Echtzeitverhalten ankommt. Du könntest aber gut ins Verwicklungsteam von Windows passen. Da wird auch an der einen Stelle mühevoll "repariert", was an anderer Stelle fahrlässig oder dickköpfig als Fehler eingebaut wurde. Siehe Visual Basic. Das ist für mich das schlimmste Beispiel.

                1. Hallo Thomas,

                  [mir fehlen da die Worte]

                  ... und anscheinend auch die Argumente ...

                  PS:Ich hoffe nur, dass Du keine Programme für die raumfahrt oder die Atomtechnik schreibst, wo es auf Echtzeitverhalten ankommt.

                  Ich habe mal für die Medizintechnik geschrieben, insofern solltest Du spätestens dann, wenn Dich nächstes mal irgendwas abtastet / durchleuchtet, hoffen, daß da nicht mein Code drinsteckt, oder Du unrecht hast ...

                  Viele Grüße
                  Stephan

    2. Danke

      datensatz war so eine Schreibweise

      Danke

      $currentrownum=0;
      while ($zeile = mysql_fetch_array($themen))
      {
         if($currentrownum<4)
         {

      }else

      echo $zeile["datensatz"].<br>";
         $currentownum++;
      }

  2. z.B. die ersten 3 Datesätze sollen noch den dazugehörigen
    Inhalt mit angeiget bekommen
    nich nächsten 6 Datensätze soll nur der Titel zu sehen sein

    hmm... quick & dirty fällt mir z.B. das ein:

    $themen=mysql_query('SELECT titel,themen FROM '.$table);

    $i=1;
    while($zeile=mysql_fetch_assoc($themen)) {
      if($i<=3) {
        echo [datensätze mit inhalt];
      } elseif($i<=9) {
        echo [nur titel];
      } else {
        echo [sonstwas];
      }
      $i++;
    }

  3. Hallo Andreas,

    es ist zwar unökonomisch, Daten zu holen, die man dann wegschmeißt, aber erzähl doch Deinem Computer GENAU das, was Du uns geschrieben hast :-))

    Ich würde da einfach mal über die Einführung eines Schleifenzählers und das Wörtchen IF nachdenken.

    Und noch was: Mal Dir ein Bild, was nachher dabei herauskommen soll.

    Ich habs so verstanden:

    $rcount=0
    +----------------------+
    | Titel                |  $rcount=1
    | Inhalt               |
    +----------------------+
    | Titel                |  $rcount=2
    | Inhalt               |
    +----------------------+
    | Titel                |  $rcount=3
    | Inhalt               |
    +----------------------+
    | Titel                |  $rcount=4
    +----------------------+
    | Titel                |  $rcount=5
    +----------------------+
    | Titel                |  $rcount=6
    +----------------------+
    ...
    usw.

    Vom Zähler in der Schleife machst Du dann abhängig, was ausgegeben wird.

    Viel Erfolg

    Tom

  4. Großes D A N K E an alle