Nächsten AutoIncrement Wert herausfinden?

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

  • #16
    Original geschrieben von DanielD
    wie jetzt goth ... sag bloß du wusstest nicht dass eindeutige ids in datenbanken totaler schwachsinn sind .... und sowas mit deiner erfahrung *g*
    ...
    EDIT:
    Damits net wie Spam aussieht, hier des Rätsels Lösung (oder jedenfalls eine Möglichkeit):
    http://www.hk8.org/old_web/linux/sql/ch06_05.htm

    Nein wusste ich wirklich nicht ... warum auch ... ?!
    Kluge Texte kennst Du ... mit so wahren Aussagen wie "Neither MySQL nor mSQL support transactions" ... !
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #17
      was ne diskussion....
      jeder der konzeptionell nachdenkt wird in seinem system auto werte verwenden um automatische verknuepfungen zu erstellen oder erstellen lassen und eben sprechende keys benutzen wenn sie etwas aussagen sollen , etc.

      artikelnummern koennen auf milliarden rechnungen gedruckt sein und sich trotzdem aendern...
      Beantworte nie Threads mit mehr als 15 followups...
      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

      Kommentar


      • #18
        Original geschrieben von MelloPie
        was ne diskussion....
        jeder der konzeptionell nachdenkt wird in seinem system auto werte verwenden um automatische verknuepfungen zu erstellen oder erstellen lassen und eben sprechende keys benutzen wenn sie etwas aussagen sollen , etc.

        artikelnummern koennen auf milliarden rechnungen gedruckt sein und sich trotzdem aendern...
        MelloPie,

        mit Verlaub, du schreibst Qu*rk, halte dich doch einfach an deine Sig.

        Du solltest nicht von dich auf andere schließen und damit implizieren,
        daß wenn jemand es anders macht als du, nicht konzeptionell denkt.

        Ich bleibe dabei, auto_increment ist redundant, es gibt nicht _eine_
        plausible Begründung es zu nutzen.

        Du kannst es ja gerne nutzen, aber schreibe nicht zwischen den Zeilen,
        daß alle anderen Idioten sind.

        auf, Mrd. Rgs und trotzdem ändern, daß ich nicht lache! Ändere mal
        bei Quelle auch nur 1 (bis zu 8 Jahre alte), abgedruckte Artikelnr =>
        da wirst du regreßpflichtig. Also vorher nachdenken, auf a_i verzichten,
        dann muß man auch nichts ändern.

        so, jetzt geh' ich in den Keller zum entspannen

        nice night
        Quickborner

        Kommentar


        • #19
          Das mit der Redundanz ist immer so 'ne sache ... natürlich sollte sich ein Datensatz in einem ordentlich normalisierten DB-Entwurf über die in Ihm enthaltene Information eindeutig identifizieren.

          Die einzige Redundante Information die ein Auto-Wert jedoch enthält ist eben jene, das dieser DS eindeutig ist ... gerade bei der Verwendung von zusammengesetzten Primärschlüssel ... oder genauer bei der Verwendung solcher als Fremdschlüssel entsteht bei genauer Betrachtung ein weitaus grösserer Bestand an redundanter Information.

          Insbesondere bei der Entwicklung von Anwendungen, die unter hoher Last gefahren werden, zeigt die Erfahrung das es durchaus sinnvoll ist mit Auto-Werten zu arbeiten, da insbesondere die Verknüpfung von Tabellen (JOINS) über einen relativ kleinen numerischen Schlüssel weitaus weniger Kostenintensiv ist.

          Theorie hat häufig nichts mit der Realität zu tun ... vielleicht lernst Du das schliesslich auch noch einmal ... im übrigen ... fast alle RDBMS bieten diese Funktionalitäten an ... (MySQL, MS-SQL als Autowert, PostgreSQL, Oracle, mSQL als Sequences) ... sicher sind die Entwickler dieser Systeme und auch die Verwender dieser Features weitaus dummer als Du ... und sicherlich bin ich das auch ... aber irgendwie bin ich auch fauler ... und deshalb verwende ich (meistens) Autowerte und Ihre Derivate weil ich weder Zeit noch Lust habe mir was eigenes zu entwickeln, was sicherlich auch nicht ansatzweise so genial wäre wie Du ... !
          carpe noctem

          [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
          [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

          Kommentar


          • #20
            @quickborner halt mal den Ball flach
            Quelle mag nichts aendern andere grosse Firmen aendern schon mal Namen von lange eingefuehrten produkten...

            Also mach Dich locker, ich geh mal in Keller die Waesche is fertig...
            Du kannst ja solange in Deinem Quelle katalog blaettern.
            Zuletzt geändert von MelloPie; 25.08.2004, 15:29.
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Kommentar


            • #21
              nehme meinen Beitrag besser wieder raus
              Zuletzt geändert von shortie19; 25.08.2004, 21:40.
              Wusstet ihr schon?
              Wer später bremst ist länger schnell!

              Die wahrscheinlich beste Funktion in PHP ist mysql_error(), doch leider auch die unbekannteste!

              Kommentar


              • #22
                Hallo !

                Solch eine interessante Diskussion wollte ich aber nicht auslösen, natürlich
                braucht man AutoIncrements.

                Doch zu meinem Problem:

                Folgendes Stückchen Code...
                PHP-Code:
                $x=mysql_query("SELECT LAST_INSERT_ID() from artikel");
                $y=mysql_fetch_array($x);
                print_r ($y); 
                gibt bei mir aus:
                PHP-Code:
                Array ( [0] => [last_insert_id()] => 
                Artikel hat das feld ID welches als AutoIncrement deklariert ist.

                Also wäre der letze AutoIncrement Wert 0 (bei Stelle 0 im Array). Das ist quark, denn er ist 10. Was mache ich da falsch?

                Ich schreibe derzeit (seit 1 1/2 Jahren) ein CMS. Darin gibt es die Möglichkeit Bilder zu Artikeln hochzuladen. Wenn ich einen neuen Artikel anlege, möchte ich das Bilder hochgeladen und bereits verkleinert (unter Nutzung der GD Library) als Vorschau angezeigt werden können. Das heißt ich lade das Bild in der Vorschau hoch, ohne das der Artikel schon in der DB steht, trage das Bild in die DB ein und lade das TempFile auf den Server (als Icon und in Originalgröße). Um das Bild jedoch in die DB eintragen zu können benötige ich den nächsten AutoIncrement Wert den dieser Artikel haben wird obwohl er noch nicht in der DB exisiert. Die letzte ID herauszufinden ist quatsch, denn wie wir alle wissen ist die letzte eingetragene ID +1 nicht gleich der nächste AutoIncrement Wert.

                Bsp: Wenn ich einen Artikel habe der als AutoIncrement Wert 13 hat und dieser dann gelöscht wird hat der nächste Artikel nicht automatisch diesen Wert sondern eben 14.

                Weiß jemand eine Lösung für mein Problem.
                Gruß Christian

                Kommentar


                • #23
                  bullshit...vielleicht hätte ich vorher mal in der doku blättern sollen:

                  mysql_insert_id() liefert die ID, die bei der letzten INSERT-Operation für ein Feld vom Typ AUTO_INCREMENT vergeben wurde. Wenn die Verbindungs-Kennung nicht angegeben wird, wird die zuletzt geöffnete Verbindung angenommen.

                  mysql_insert_id() liefert 0, wenn die vorhergehende Abfrage keinen AUTO_INCREMENT Wert erzeugt hat. Falls Sie den Wert zur späteren Verwendung speichern möchten, stellen Sie sicher, dass Sie mysql_insert_id() direkt nach der Abfrage aufrufen, die einen Wert erzeugt hat.

                  Demnach ist dieser Befehl unbrauchbar für mich weil ich bereits mit der ersten Verbindung im Script den letzten bzw. nächsten AutoIncrement Wert herausfinden will und das geht nicht. Das heißt das Ergebniss "0" wie im meinem Fall ist schon richtig weil es vorher keine Verbindung gab die einen AutoIncrement eingetragen hat.

                  *ARGH*

                  Hat jemand eine Idee?
                  Gruß Christian

                  Kommentar


                  • #24
                    Original geschrieben von christianpfeil
                    bullshit...vielleicht hätte ich vorher mal in der doku blättern sollen:
                    vielleicht hättest du auch alles lesen sollen, was da steht:

                    Anmerkung: Der Wert der MySQL SQL Funktion LAST_INSERT_ID() liefert immer den zuletzt erzeugten AUTO_INCREMENT Wert. Dieser wird zwischen Abfragen nicht zurückgesetzt.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #25
                      nein. du willst den erstellten wert erst dann rausfinden, wenn es in der DB eingetragen wurde ... alles andere ist nämlich bullshit.
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #26
                        Hi !

                        Warum funktioniert dann die folgende Abfrage nicht:
                        PHP-Code:
                        $x=mysql_query("SELECT LAST_INSERT_ID() from artikel");
                        $y=mysql_fetch_array($x);
                        print_r ($y); 
                        bzw.:

                        PHP-Code:
                        $x=mysql_query("SELECT LAST_INSERT_ID() from artikel");
                        $y=mysql_fetch_array($x);
                        echo 
                        $y[0]; 
                        Wie müsste ich das gestalten?

                        Danke,
                        Gruß Christian

                        Kommentar


                        • #27
                          Definiere funktioniert nicht
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #28
                            Original geschrieben von christianpfeil
                            Wie müsste ich das gestalten?
                            du müsstest vorher auch einen datensatz mittels INSERT während der aktuellen verbindung anlegen, wenn du den wert auslesen willst.
                            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                            Kommentar


                            • #29
                              du müsstest vorher auch einen datensatz mittels INSERT während der aktuellen verbindung anlegen, wenn du den wert auslesen willst.
                              das ist ja genau der punkt: es gibt kein insert oder update vorher. ich möchte einfach nur den letzten auto_increment wert haben. Ich mache auch an dieser stelle keinen insert (oder davor).

                              Definiere funktioniert nicht
                              die ausgabe ist nach wie vor "0".

                              Gruß Christian

                              Kommentar


                              • #30
                                Re: Nächsten AutoIncrement Wert herausfinden?

                                dann erkläre mir bitte nochmal was gegen SHOW TABLE STATUS spricht?
                                Ich denke, also bin ich. - Einige sind trotzdem...

                                Kommentar

                                Lädt...
                                X