Joan: datensätze auslesen

Hallöchen,

ich hab da so ein kleines Problemchen.
Ich speicher die Daten aus einem Formular in ner mysql Datenbank.
Jeder Datensatz hat ne ID.
Wenn ich aber jetzt ein datensatz lösche, dann wird der nächste nicht speichert, da die ids dann gleich sind.
das ergibt sich folgender maßen:
ich lasse für die id die datensätze zählen und erhöhe für den neuen um eins.

ich müsste aber die id im letzten datensatz auslesen und dann um eins erhöhen.

meine frage ist nun wir realiesier ich das?
bis jetzt konnte ich noch nichts hilfreiches finden.
kann mir vielleicht einer von euch weiterhelfen?
wäre echt toll.

danke im vorraus.

Joan

  1. Huhu Joan

    folgendes Szenario:

    Du bist an einem wunderschönen einsamen Strand, weit und breit kein Mensch zu sehen. Die Sonne brennt. Achtung, schnell eincremen sonst Sonnenbrand -> Hautkrebs -> Exitus.
    Aber niemand ist da um Dir den Rücken einzusalben.

    Da hilft also nur "auto(nomes)_(e)in_cremen_(der wer)t(vollsten Teile)", oder so.

    Viele Grüße

    lulu

    1. Hallo lulu,

      folgendes Szenario:

      Du bist an einem wunderschönen einsamen Strand, weit und breit kein Mensch zu sehen. Die Sonne brennt. Achtung, schnell eincremen sonst Sonnenbrand -> Hautkrebs -> Exitus.
      Aber niemand ist da um Dir den Rücken einzusalben.

      Da hilft also nur "auto(nomes)_(e)in_cremen_(der wer)t(vollsten Teile)", oder so.

      Ich wußte gar nicht das man solche dinge so schön verpacken kann. Ich hab es zwar schon benutzt, aber ich glaub, ich weiß was ich noch ändern muss.

      Danke!

      Gruß,
      Joan

      1. Hallo lulu,

        leider ist mein Problem noch nicht 100% behoben.
        Denn bei der Ausgabe wird mir ja die Zahl ausgegeben, die gleich der Anzahl der Datensätze ist. Ich brauche aber den Wert der in dem Feld bei dem Datensatz steht.
        Also muss ich noch das Feld auslesen, oder?

        Hattst du vielleicht noch einen bezaubernden Vorschlag?

        Danke!
        Gruss,
        Joan

        1. Huhu Joan

          so ganz kann ich Dein Problem nicht nachvollziehen.

          vielleicht hilft Dir dieses

          http://www.php.net/manual/en/function.mysql-insert-id.php

          ansonsten beschreibe Dein Problem noch einmal anders/ genauer.

          Viele Grüße

          lulu

  2. Hallöchen,

    hallo

    ich hab da so ein kleines Problemchen.
    Ich speicher die Daten aus einem Formular in ner mysql Datenbank.
    Jeder Datensatz hat ne ID.
    Wenn ich aber jetzt ein datensatz lösche, dann wird der nächste nicht speichert, da die ids dann gleich sind.
    das ergibt sich folgender maßen:
    ich lasse für die id die datensätze zählen und erhöhe für den neuen um eins.

    ich müsste aber die id im letzten datensatz auslesen und dann um eins erhöhen.

    meine frage ist nun wir realiesier ich das?

    lass das die datenbank machen, die sache mit den ids
    in postgrsql heisst das serial, in mysql wird es wohl einen ähnlichen befehl geben

    gruss romy

    ps: zu schreiben natürlich in der datenbankdatei hinter der deklaration deiner id

  3. also, erstmal ist es unmöglich(!) eine id doppelt vorzufinden - zumindest wenn du es schön wie es in den büchern steht oder auch in diversen kostenlosen tuts und dokus - via auto_increment gemacht hast. denn dann erhöht sich die id automatisch um 1, sobald ein neuer datensatz angelegt wird. werden zwischenzeitlich ein paar daten aus der tabelle gelöscht enstehen zwar differenzen in der id reihenfolge, aber das liegt daran, dass via auto_increment die ids (wie oben bereits erwähnt) von der ersten insert_anweisung an immer um eins erhöht werden, und somit mal die 32 auf 30 folgen kann, wenn die 31 gelöscht wurde.
    nur solltest du nicht einmal über das mindest-sql-wissen verfügen (anlegen von tabellen, grundwissen), so lese bei deiner nächsten frage erstmal ein paar dokus oder ähnliches durch (zb. www.php.net) bevor du dieses forum für so etwas in anspruch nimmst. ok
    comunicout

    1. nur solltest du nicht einmal über das mindest-sql-wissen verfügen (anlegen von tabellen, grundwissen), so lese bei deiner nächsten frage erstmal ein paar dokus oder ähnliches durch (zb. www.php.net) bevor du dieses forum für so etwas in anspruch nimmst. ok

      Sorry das ich dich entäuschen muss, denn ich besitze, wie hast du es so schön gesagt, "mindest-sql-wissen".
      Und hab auch das auto_increment verwendet.

      Joan

      1. Gugucks Joan,

        Und hab auch das auto_increment verwendet.

        wenn die ID deiner Datensätze über auto_increment erzeugt wird, dann liegt der Hase woanders im Pfeffer und nicht bei der identischen ID.
        Du sagst, das Problem tritt auf, wenn du einen Datensatz löscht. Kannst du ein bisschen genauer beschreiben, was du erreichen willst und was du bislang zusammengestrickt hast?

        gruß, uschi

        1. Hallo uschi,

          alos das Problem mit dem Löschen hab ich jetzt im Griff.
          Aber leider ist mein Problem noch nicht 100% behoben.
          Denn bei der Ausgabe wird mir ja die Zahl ausgegeben, die gleich der Anzahl der Datensätze ist. Ich brauche aber den Wert der in dem Feld bei dem Datensatz steht.
          Also muss ich noch das Feld auslesen, oder?

          Zur Info:
          Ich speicher die Datensätze, die Id die dabei vergeben wird, wird später für andere Funktionen (z.B.: Suche) benötigt. Also muss ich ja den Wert im Feld haben und nicht den Wert der entsteht, wenn ich die Datensätze zähle.

          Ich hoffe, ich konnte das ganze so kurz und präzise wie möglich beschreiben.

          Danke!
          Gruss,
          Joan

          1. Moin Joan,

            alos das Problem mit dem Löschen hab ich jetzt im Griff.

            Wie schön :-))

            Aber leider ist mein Problem noch nicht 100% behoben.

            Wie schade ;-((

            Denn bei der Ausgabe wird mir ja die Zahl ausgegeben, die gleich der Anzahl der Datensätze ist.

            Also, die Anzahl der Datensätze wird dir doch nur ausgegeben, wenn du explizit danach fragst. Tust du das? So nach dem Prinzip:
            $result = mysql_query("SELECT * FROM tabelle);
            $num_rows = mysql_num_rows($result);

            Prinzipiell hat die Anzahl der Datensätze mit der ID des letzten Datensatzes nichts zu tun.

            Ich brauche aber den Wert der in dem Feld bei dem Datensatz steht.

            Also muss ich noch das Feld auslesen, oder?

            Sind wir jetzt beim Einfügen oder beim Auslesen?
            Möchtest du in dem Moment, wo ein neuer Datensatz eingefügt wird, wissen, welche ID dieser neue Datensatz erhalten hat?
            In diesem Falle heißt dein Freund mysql_insert_id();

            Zur Info:
            Ich speicher die Datensätze, die Id die dabei vergeben wird, wird später für andere Funktionen (z.B.: Suche) benötigt. Also muss ich ja den Wert im Feld haben und nicht den Wert der entsteht, wenn ich die Datensätze zähle.

            Hm, mit anderen Worten, dir ist unklar, wie du an die Werte der einzelnen Felder rankommst, nachdem du die Datensätze ausgelesen hast? Das geht wunderbar mit mysql_fetch_assoc(); Dadurch erhältst du pro Datensatz ein assoziatives Array mit dem Feldnamen als key und dem entsprechenden Wert als value. Diese assoziativen Arrays speicherst du in einem numerischen Array.

            Hier ein Beispiel, dass davon ausgeht, dass wir eine Tabelle namens "leute" mit den Feldern id, nachname und vorname haben und 3 Datensätze enthält.

            id nachname vorname
            1 Daumeier Fred
            --------------- ---------
            3 Amsel Wilma
            ---- ---------- ---------
            4 Grube Claire
            -------------------------

            $result = mysql_query("SELECT * FROM leute ORDER BY nachname,vorname");
            while ($row = mysql_fetch_assoc($result) {
              $arLeute[] = $row;
            }

            Im Ergebnis hast du nun ein zweidimensionales Array namens $arLeute, das folgendermaßen strukturiert ist:
            Array
            (
                [0] => Array
                    (
                        [id] => 3
                        [nachname] => Amsel
                        [vorname] => Wilma
                    )

            [1] => Array
                    (
                        [id] => 1
                        [nachname] => Daumeier
                        [vorname] => Fred
                    )

            [2] => Array
                    (
                        [id] => 4
                        [nachname] => Grube
                        [vorname] => Claire
                    )

            )

            Durch dieses Array kannst du mit einer for-Schleife durchbrowsen, z.B. so:

            for($i = 0; $i < count($arLeute); $i++) {
             echo $arLeute[$i]["id"] ." : " .$arLeute[$i]["nachname"] ." : " .$arLeute[$i]["vorname"] ."<br />";
            }

            Mit count($arLeute) kommst du an die Anzahl deiner Zeilen.

            Ich hoffe, ich konnte das ganze so kurz und präzise wie möglich beschreiben.

            Leider nicht wirklich. Ich habe dein Problem nicht erfassen können :-((

            gruß, uschi

            1. Hallo uschi,

              Denn bei der Ausgabe wird mir ja die Zahl ausgegeben, die gleich der Anzahl der Datensätze ist.
              Also, die Anzahl der Datensätze wird dir doch nur ausgegeben, wenn du explizit danach fragst. Tust du das?

              Ja

              Prinzipiell hat die Anzahl der Datensätze mit der ID des letzten Datensatzes nichts zu tun.

              Eben, das ist ja das Problem.

              Ich brauche aber den Wert der in dem Feld bei dem Datensatz steht.

              Also muss ich noch das Feld auslesen, oder?
              Sind wir jetzt beim Einfügen oder beim Auslesen?

              beim Auslesen

              Möchtest du in dem Moment, wo ein neuer Datensatz eingefügt wird, wissen, welche ID dieser neue Datensatz erhalten hat?
              In diesem Falle heißt dein Freund mysql_insert_id();

              Ja

              Hm, mit anderen Worten, dir ist unklar, wie du an die Werte der einzelnen Felder rankommst, nachdem du die Datensätze ausgelesen hast? Das geht wunderbar mit mysql_fetch_assoc(); Dadurch erhältst du pro Datensatz ein assoziatives Array mit dem Feldnamen als key und dem entsprechenden Wert als value. Diese assoziativen Arrays speicherst du in einem numerischen Array.

              aja, könntest du das bitte genauer erklären?

              while ($row = mysql_fetch_assoc($result)
                { $arLeute[] = $row;
                }
              for($i = 0; $i < count($arLeute); $i++) {
                echo $arLeute[$i]["idk"] ." : " .$arLeute[$i]["name"] ." : " .$arLeute[$i]["vorname"] ."<br />";
                 }
              ich glaub ich steh auf dem schlauch, ich steig da irgendwie nicht wirklich durch

              Gruss,
              Joan

              1. Hi Joan,

                aja, könntest du das bitte genauer erklären?

                nicht, daß ich etwas PHP könnte ... aber das Zeug hier sieht so aus,
                daß ich das Prinzip zu begreifen glaube.

                Diese fetch-Routine liefert offenbar eine ganze Zeile Deiner Tabelle
                zurück.
                Aus der nachfolgenden Adressierung schließe ich, daß sie als Hash oder
                Verweis auf einen Hash oder irgendwas in dieser Art geliefert wird.

                while ($row = mysql_fetch_assoc($result)

                Nehmen wir mal an, diese Schleife wäre korrekt geklammert ... ;-)

                Dann liefe sie so lange, wie die fetch-Routine noch eine weitere
                Zeile zu liefern hat. Diese (oder ein Verweise darauf?) wird in $row
                gespeichert. Ansonsten wird die Schleife nicht mehr durchlaufen.

                { $arLeute[] = $row; }

                Und das hängt anscheinend ein weiteres Element an den Array $arLeute
                dran. (Huch, sieht alles irgendwie anders aus als in Perl, aber man
                versteht es doch ...)

                Nach dieser Schleife hast Du also alle Zeilen Deiner Tabelle in der
                Struktur $arLeute drin stehen.
                (Übrigens keine Methode, die ich Dir empfohlen hätte - wenn Du nicht
                alle Zeilen auf einmal brauchst, dann wäre es besser, direkt nach je-
                dem "fetch" die Zeile auszuwerten, das frißt weniger Arbeitsspeicher.)

                for($i = 0; $i < count($arLeute); $i++) {

                Das ist jetzt eine Schleife über alle Zeilen ...

                echo $arLeute[$i]["idk"] ." : " .$arLeute[$i]["name"] ." : " .$arLeute[$i]["vorname"] ."<br />";

                Und das klebt anscheinend eine Ausgabezeile zusammen, wobei die
                Elemente "idk", "name" und "vorname" aus dem hash (?) entnommen werden,
                in den die "fetch"-Funktion die Spalten der jeweiligen Tabellenzeile
                abgelegt hat.
                (Diese Anweisung hätte auch schon in der ersten Schleife stehen können.)

                ich glaub ich steh auf dem schlauch, ich steig da irgendwie nicht
                wirklich durch

                Der Trick ist, den Bruch zwischen den beiden Universen zu verstehen.

                SQL denkt in Mengen; PHP etc. denken in Listen, Schleifen, endlichen
                Variablen. Also läßt sich eine Menge von Zeilen nicht durch eine ein-
                fache Zuweisung aus der Datenbank ziehen, sondern nur durch eine
                Schleife über die gefundenen Zeilen - und jede Zeile besteht wieder
                aus den Feldern, wobei Dir diese "fetch"-Funktion erlaubt, innerhalb
                der Zeile (des Hash?) diese Felder über ihren Namen anzusprechen.

                Besser so?

                Viele Grüße
                      Michael

                P.S.: Gutes Fragen ist auch eine Übungssache. Du schlägst Dich bisher
                      tapfer und hast den Beistand von Uschi allemal verdient.

                1. Hallo, Michael,

                  Diese fetch-Routine liefert offenbar eine ganze Zeile Deiner Tabelle
                  zurück.
                  Aus der nachfolgenden Adressierung schließe ich, daß sie als Hash oder
                  Verweis auf einen Hash oder irgendwas in dieser Art geliefert wird.

                  Hash? ;) Gut dass es in PHP keine feste Trennung zwischen numerisch indizierten und assoziativen Arrays gibt. mysql_fetch_assoc() gibt aber, wie du sagst, einen assoziativ indizierten Array zurück (sagt man das so? mir fehlen die Grundlagen), hinzu kommen mysql_fetch_row() für numerische Indizes und mysql_fetch_array() für beides oder auch als Ersatz für die beiden speziellen Funktionen, nur ein entsprechender Parameter ist nötig.

                  (Übrigens keine Methode, die ich Dir empfohlen hätte - wenn Du nicht
                  alle Zeilen auf einmal brauchst, dann wäre es besser, direkt nach je-
                  dem "fetch" die Zeile auszuwerten, das frißt weniger Arbeitsspeicher.)

                  Einfache Frage: Wieso? Auf dem ersten Blick erscheint es logisch, aber auf den zweiten Blick merkt man, dass das komplette MySQL-Resultat schon im Speicher vorhanden ist, denn die Abfrage ist schon längst abgeschlossen, wenn die Arrays daraus "gefetcht" werden. Ich kenne die PHP-Interna nicht, aber ich nehme an, dass die MySQL-Daten erst zeilenweise in von PHP (bzw. C) bearbeitbare Daten umgewandelt werden (der Vorgang des Fetchens :)).
                  Nämlich wenn schon direkt nach der MySQL-Query die kompletten Ergebnisdaten in ein für PHP verarbeitbares Format umgewandelt werden, wäre das zeilenweise Auslesen eine Farce, da die Daten Zeile für Zeile im Speicher verdoppelt würden, wenn man sie in eine Variable/einen Array schreibt. Denn intern würde ein Art verschachtelter Array bereits existieren.

                  Wie sehen denn die MySQL-Ergebnisdaten aus, gibt es dort überhaupt so etwas wie eine Datensatztrennung, welche es ermöglicht, einen Teil des Results zu lesen, ohne dass gleich das komplette Result geparst/umgewandelt werden muss?

                  Ich bearbeite MySQL-Ergebnisse zwar auch immer zeilenweise und sehe auch ein, dass es klug sein mag, aber ob es wirklich notwendig (weil ökonomisch) ist, ist bei einer nicht speichernahen Sprache wie PHP nicht einfach erkennbar.

                  Und das klebt anscheinend eine Ausgabezeile zusammen, wobei die
                  Elemente "idk", "name" und "vorname" aus dem hash (?) entnommen werden,

                  Ja, PHP nennt es wohl assoziativer Array, obwohl Hash auch sprachübergreifend bekannt sein sollte, aber da man in PHP einen solchen Array auch über Indizes ansprechen kann, sagt man wohl eher schlicht "Array". :) (Ich liebe PHP für eine fast dämliche Einfachheit... ;) Ergo didaktisch wertlos. :))

                  Der Trick ist, den Bruch zwischen den beiden Universen zu verstehen. SQL denkt in Mengen; PHP etc. denken in Listen, Schleifen, endlichen Variablen. Also läßt sich eine Menge von Zeilen nicht durch eine ein fache Zuweisung aus der Datenbank ziehen,

                  Doch, eben das passiert: eine MySQL-Abfrage liefert *alle* Datensätze (dürfte in Perl nicht anders sein?). Danach hat PHP die gesamten Ergebnisdaten im Speicher und man kann sie aber nur zeilenweise "abrufen"...
                  Noch bevor das Result durch mysql_(result|fetch_*) bearbeitet wird, kann man die Verbindung zur Datenbank schließen, die Datenbank wird also nur einmal befragt, nicht zeilenweise.

                  sondern nur durch eine Schleife über die gefundenen Zeilen

                  "Wieso?" Wieso gibt eine keine Funktion, die ein komplettes Result (alle gefundenen Datensätze) in einen Array "überführt"? Wenn man arraytypische Operationen durchführen will, ist es sinnlos, die Datensätze einzeln in einen Array einzusortieren, denn der vom Result belegte Speicher kann erst über mysql_free_result freigegeben werden, wenn bereits ein Duplikat des kompletten Arrays im Speicher vorhanden ist. Man müsste also vermeiden, dass dies überhaupt passieren kann...

                  Sicherlich wirde eine "mysql_fetch_all"-Funktion missbraucht werden und die Performance und die Speichernutzung wäre gräßlich, wenn man sie falsch anwendet, aber davon abgesehen wäre es sicherlich effizienter als wenn man in einer Interpretersprache eine Funktion x-mal in einer Schleife aufruft, das ist nur unnötige Übersetzungsarbeit.

                  Wenn man bedenkt dass man mit mysql_data_seek() immerhin innerhalb des Results herumspringen kann, also würde man einen Zeiger innerhalb eines Arrays setzen, dann muss das Result definitiv schon *vor* jeglichem fetch_*-Aufruf in einer arrayförmigen Speicherstruktur vorhanden sein... *mutmaß*
                  Wenn man zudem bedenkt, dass mysql_unbuffered_query() *während* die Anfrage noch läuft schon Datensätze liefern kann, dann verhärtet sich mein Verdacht immens...

                  *g* Schon lustig, wenn man keine Ahnung hat, aber Theorien aufstellt. ;) Vielleicht kann irgendjemand mit meinen Untersuchungen etwas anfangen oder kann mir weiterhelfen...

                  Grüße,
                  Mathias

                  1. Hi Mathias,

                    Einfache Frage: Wieso? Auf dem ersten Blick erscheint es logisch,
                    aber auf den zweiten Blick merkt man, dass das komplette MySQL-
                    Resultat schon im Speicher vorhanden ist, denn die Abfrage ist schon
                    längst abgeschlossen, wenn die Arrays daraus "gefetcht" werden.
                    Ich kenne die PHP-Interna nicht, aber ich nehme an, dass die MySQL-
                    Daten erst zeilenweise in von PHP (bzw. C) bearbeitbare Daten
                    umgewandelt werden (der Vorgang des Fetchens :)).
                    Nämlich wenn schon direkt nach der MySQL-Query die kompletten
                    Ergebnisdaten in ein für PHP verarbeitbares Format umgewandelt
                    werden, wäre das zeilenweise Auslesen eine Farce, da die Daten Zeile
                    für Zeile im Speicher verdoppelt würden, wenn man sie in eine
                    Variable/einen Array schreibt. Denn intern würde ein Art
                    verschachtelter Array bereits existieren.

                    hm. Ich weiß es genauso wenig wie Du, aber man kann ja mal ein bißchen
                    philosophieren.

                    Wenn die "PHP-Maschine" ein hinreichend enges Interface zum Memory-Pool
                    von mySQL hätte, dann könnte ein Fetch natürlich in der tat daraus be-
                    stehen, einen Pointer auf eine dort bereits existierende Datenstruktur
                    durchzureichen. In diesem Falle würden die Daten nie zweimal im Speicher
                    stehen. Allerdings wäre das nicht wirklich die maschinenunabhängigste
                    aller Implementierungen.
                    Insofern rechne ich doch eher damit, daß PHP beim "fetch" brav eine Kopie
                    anlegt. Und _dann_ möchte ich eben nicht das gesamte Ergebnis der Query
                    _zweimal_ im Arbeitsspeicher stehen haben - einmal im mySQL-Pool, wo es
                    erst nach dem Ende der Schleife freigegeben werden kann, und noch einmal
                    im Adreßraum des PHP-Prozesses, der dort seinen assoziativen Array in den
                    Speicher prügelt. Mit etwas Pech swappen die beiden dann auch noch fröh-
                    lich gegeneinander ...

                    Wie sehen denn die MySQL-Ergebnisdaten aus, gibt es dort überhaupt so
                    etwas wie eine Datensatztrennung, welche es ermöglicht, einen Teil des
                    Results zu lesen, ohne dass gleich das komplette Result
                    geparst/umgewandelt werden muss?

                    Also eine Struktur werden die elementaren Datensätze sicherlich haben.
                    Welche genau, das hängt sicherlich vom jeweiligen Tabellentreiber ab -
                    da ist die Angabe "mySQL" wohl nicht genau genug.

                    Ich bearbeite MySQL-Ergebnisse zwar auch immer zeilenweise und sehe
                    auch ein, dass es klug sein mag, aber ob es wirklich notwendig (weil
                    ökonomisch) ist, ist bei einer nicht speichernahen Sprache wie PHP
                    nicht einfach erkennbar.

                    Wenn man sich so etwas einmal angewöhnt hat, dann macht man es automa-
                    tisch richtig, wenn man an eine Sprache gerät, bei der es wichtig ist.
                    Das ist einfacher, als von jedem neuen Interpreter den Quelltext zu
                    lesen. ;-)

                    Der Trick ist, den Bruch zwischen den beiden Universen zu verstehen.
                    SQL denkt in Mengen; PHP etc. denken in Listen, Schleifen, endlichen
                    Variablen. Also läßt sich eine Menge von Zeilen nicht durch eine ein
                    fache Zuweisung aus der Datenbank ziehen,
                    Doch, eben das passiert: eine MySQL-Abfrage liefert *alle* Datensätze
                    (dürfte in Perl nicht anders sein?). Danach hat PHP die gesamten
                    Ergebnisdaten im Speicher und man kann sie aber nur zeilenweise
                    "abrufen"...

                    Gerade _weil_ man sie dann aber nur zeilenweise abrufen kann, macht es
                    gar keinen Sinn, sie gleichzeitig im Speicher zu halten. Es sei denn,
                    man muß eine Operation auf ihnen durchführen, für die man alle auf ein-
                    mal braucht - Sortieren, um ein Beispiel zu nennen.
                    (Dann hätte man allerdings im vorliegenden Szenario, bei dem man genau
                    dies besser der Datenbank überlassen sollte, etwas verkehrt gemacht.)

                    Noch bevor das Result durch mysql_(result|fetch_*) bearbeitet wird,
                    kann man die Verbindung zur Datenbank schließen, die Datenbank wird
                    also nur einmal befragt, nicht zeilenweise.
                    sondern nur durch eine Schleife über die gefundenen Zeilen

                    Wie oft die Datenbank tatsächlich befragt wird, das muß man der Hoch-
                    sprache ja gar nicht ansehen. Wenn ich in Pascal ein Zeichen lese, dann
                    greif das Laufzeitsystem dafür ja auch nicht auf die Festplatte zu,
                    sondern erst mal auf seinen I/O-Buffer, und erst wenn der ausgelutscht
                    ist, wird er neu geladen. Zwischen diesen Abstraktionsebenen eine
                    Schicht zu ziehen, welche die Sache performanter macht, das ist eine
                    der Leistungen von Laufzeitsystemen - analog dazu, daß Perl und PHP dem
                    Anwender ersparen, über das Allozieren von Arbeitsspeicher zu sehr im
                    Detail nachdenken zu müssen. (Aber einen Hash mit einer Milliarde Ein-
                    träge aufzubauen ist auch in Perl noch keine gute Idee. ;-)

                    "Wieso?" Wieso gibt eine keine Funktion, die ein komplettes Result
                    (alle gefundenen Datensätze) in einen Array "überführt"? Wenn man
                    arraytypische Operationen durchführen will, ist es sinnlos, die
                    Datensätze einzeln in einen Array einzusortieren, denn der vom Result
                    belegte Speicher kann erst über mysql_free_result freigegeben werden,
                    wenn bereits ein Duplikat des kompletten Arrays im Speicher vorhanden
                    ist. Man müsste also vermeiden, dass dies überhaupt passieren kann...

                    Eben - es reicht ja, wenn das "fetch" eine Zeile abgreift. Warum soll ich
                    die noch mal in einem lokalen Array speichern und dann auf den zugreifen?

                    Wenn man bedenkt dass man mit mysql_data_seek() immerhin innerhalb des
                    Results herumspringen kann, also würde man einen Zeiger innerhalb eines
                    Arrays setzen, dann muss das Result definitiv schon *vor* jeglichem
                    fetch_*-Aufruf in einer arrayförmigen Speicherstruktur vorhanden
                    sein... *mutmaß*

                    Das denke ich auch.

                    *g* Schon lustig, wenn man keine Ahnung hat, aber Theorien aufstellt.

                    So etwas nennt man "Wissenschaft" - etwas tun, das Wissen schafft. ;-)

                    Viele Grüße
                          Michael

                    P.S.: http://www.laum.uni-hannover.de/ilr/lehre/VerwWiss/Ptm_WissTheo.htm#theorie

                2. Hi Michael,

                  P.S.: Gutes Fragen ist auch eine Übungssache. Du schlägst Dich   bisher
                        tapfer und hast den Beistand von Uschi allemal verdient.

                  Danke!

                  Gruss,
                  Joan

  4. Hallo ihr beiden,

    ich kann mir nicht helfen, ich habe mich über eure beiden Postings geärgert. comunicouts hatte der armen Joan wenigstens noch etwas Hilfreiches zu bieten. Aber dann kommt der folgende Satz:

    <quote>
    nur solltest du nicht einmal über das mindest-sql-wissen verfügen (anlegen von tabellen, grundwissen), so lese bei deiner nächsten frage erstmal ein paar dokus oder ähnliches durch (zb. www.php.net) bevor du dieses forum für so etwas in anspruch nimmst. ok
    </quote>
    lulus Posting ist meiner unmaßgeblichen Meinung nach eine völlig unsachliche Zumutung.
    Der Rat, ein paar Dokus oder Ähnliches durchzulesen, mag angehen. Aber wenn jemand offenbar keine Ahnung von Datenbank-Design hat - und das kann selbst jemand mit gesundem Halbwissen wie dem meinen aus Joans Posting erkennen - auf www.php.net zu verweisen, ist wohl fehl am Platze.
    Abgesehen davon frage ich mich, mit welchem Recht jemand eine offensichtliche Anfängerin, die ihre Frage höflich gestellt hat, awweisen kann, dieses Forum nicht ohne vorheriges Durchackern noch nicht einmal genannter Tutorials oder Dokus zu belästigen. Hast Du hier Hausrecht, comunicout? Ich auch nicht, aber mir zumindest fällt kein Zacken aus der Krone, wenn ich jemandem über Anfangsschwierigkeiten hinweg helfe, kann ich mich doch nur zu gut daran erinnern, wie das war, als ich beschlossen habe, mir einen Apachen, PHP und mySQL zu installieren und damit zu arbeiten. Unklarheiten gab es da an allen Ecken und Enden, und ich habe es bislang keineswegs geschafft, die alle zu beseitigen.
    Anfangs haben mir dabei die offiziellen Dokus zu PHP, Apache und mySQL überhaupt nicht geholfen.
    Offenbar ging euch das anders. Ihr habt natürlich erstmal nur gelesen und gelesen und gelesen und dann losgelegt, nicht wahr? Wäre ich doch nur so gestrickt wie ihr und mit eurer Auffassungsgabe ausgestattet!

    Nicht ganz so liebe Grüße, Uschi

    1. Huhuhu Uschi

      lulus Posting ist meiner unmaßgeblichen Meinung nach eine völlig unsachliche Zumutung.

      Ich gebe Dir Recht, es ist in der Tat unsachlich.
      Immerhin enthielt es einen, wenn auch versteckten, Hinweis auf die Lösung (bzw. eine Lösungsmöglichkeit resp. ein Schlagwort dazu).

      In diesem Fall ging es mir tatsächlich mehr um die Antwort, als um die Fragestellung, dass war dann wohl etwas egoistisch von mir.

      Bei meinem ersten Kontakt mit dem Wörtchen autoincrement hatte
      ich die Assoziation zu "eincremen".

      Das fiel mir beim Lesen des Fragepostings natürlich sofort ein und hat dann einen erheblichen (negativen ?) Einfluss auf die Antwort ausgeübt.

      Als Zumutung würde ich das aber nicht sehen.
      Wenn der Fragesteller in einem Abhängigkeitsverhältnis zu mir stehen würde, wie z.B. ein Kunde zu seinem Dienstleister würde ich Dir sofort zustimmen.

      Dem ist aber in einem öffentlichen Forum nicht so.

      Alle Antworten sind freiwillig.
      Im Übrigen ist es jedem freigestellt in welcher Art und Weise er
      fragt oder antwortet.

      Die anderen Forumsteilnehmer werden ggf. Ihren "Senf" dazugeben und auf formelle und informelle Regeln hinweisen.
      Davon hast Du ja auch Gebrauch gemacht.

      Ich konnte berechtigterweise davon ausgehen, dass die Fragestellung  auf jeden Fall innerhalb kurzer Zeit von anderen Forumsteilnehmern sachlich beantwortet werden wird.

      Also habe ich mir erlaubt ein, wie bereits erwähnt, von egoistischen Motiven geleitetes Nonsens-Posting zu verfassen.

      Ein einfacher Link auf entsprechende Dokumentationen wäre
      natürlich schneller gegangen und hätte dem Fragesteller mehr genutzt...

      ... aber es hätte mir nicht halb so viel Spaß gemacht ;-)

      Was Deine "unmaßgebliche Meinung" angeht, so solltest Du da nicht zu pessimistisch sein.

      Zu meinem Glück scheint Joan ja nicht abgeschreckt worden zu sein.
      Ich gebe Dir allerdings recht, dass es für manche sehr demotivierend sein könnte, solch unsinnige Antworten zu erhalten.
      Ich werde also versuchen dies bei zukünftigen scherzhaften Antworten zu berücksichtigen und jeweils einen etwas sachlicheren Teil beifügen.

      Nicht ganz so liebe Grüße, Uschi

      Viele Grüße

      lulu

      1. Gugucks lulu,

        lass uns das lassen, sonst hat dieser Thread ein halbautomatisches menschel_increment. Grinsen musste ich ja auch.

        gruß, uschi

    2. ausschnitt aus der forums_faq von selfhtml:

      [ Q-07a ] Warum sollte ich vor dem Posten einer Frage versuchen, selber eine Lösung zu finden?
      Das SELFHTML Forum ist nicht für Leute gedacht, die gar keine Lust haben, bei Problemen mal in den zahlreichen Quellen, Hilfetexten und Dokumentationen im Web nachzugucken, um das Problem möglichst selbständig zu lösen. Es will nur solchen Leuten helfen, die trotz Selbsthilfeversuchen an einer Stelle einfach nicht weiter kommen. Die Mühe, erst mal selbst nach Lösungen zu suchen, wird deshalb von jedem Teilnehmer verlangt. Wer andere Wissensquellen kennt, sollte auch diese zuerst bemühen, um eine Antwort auf das Problem zu erhalten. Hier auf dem Server stehen an Wissensquellen  SELFHTML, die  Feature-Artikel und das  Linkverzeichnis zur Verfügung. Zum schnellen Durchsuchen all dieser Bereiche sowie des umfangreichen Forumsarchivs, in dem ein Großteil der gestellten Fragen irgendwann schon mal behandelt wurde, gibt es die  SELFHTML Suche. Bei vielen Fragen lohnt es sich auch, einfach mal in  Google einen oder mehrere Begriffe, Sprachebefehle oder ähnliches einzugeben, die ein Problem einkreisen - nicht selten gelangen Sie dadurch zu interessanten, problemlösenden Seiten im Web. Bedenken Sie, dass erfahrene Forumsteilnehmer aus Ihrem Posting leicht erkennen können, ob Sie sich vorher die Mühe gemacht haben, selber eine Lösung zu finden, oder nicht."

      genau diesen weg habe ich mit meiner reaktion eingeschlagen. und nichts anderes !!!
      mfg
      christopher

  5. also ich hab auch nich richtig gecheckt was du willst ;)...

    also wenn du ein datensatz speicherst dann fasst du dabei die ID doch garnich an (weil auto) ... und beim auslesen liest du das feld mit der id genaus aus wie jede andere spalte...
    also wenn dir das nich hilft dann musst du glaub ich dein prob genauer erklären :)