Frage: Nächster Autowert von MySQL-DB auslesen

Kranetierli

Mitglied
Hallo zusammen :)

Während dem programmieren an meinem Firmenprojekt bin ich auf ein Problem gestossen, an dem ich nun schon ein paar Tage herumbastel. Falls das hier mehr mit MySQL zu tun hat, wär ich einem Moderator dankbar, den Thread zu verschieben.

Ausgangslage:
In der Applikation geht es um eine Teileverwaltung, in der die Kunden Testtetile erfassen, einbauen und ausbauen könnnen. Das ist alles schon programmiert und funktioniert bestens. Nun soll man pro Teil auch noch eine Datei anfügen können. Das Upload-Formular hab ich auch bereits programmiert und das funktioniert auch bestens, bis auf einen Punkt; Beim Heraufladen einer Datei werden alle Informationen zu einer Datei, also zum Beispiel Originalname und Dateityp, in die Datenbank gespeichert und die Datei zuerst in das TEMP-Verzeichnis auf den Server und dann unbenannt und in /upload kopiert.

Problem:
Um zu verhindern dass eine Datei überschrieben wird, speichere ich die Datei unter der ID der Datenbank. So kann ich auch später per ID die Datei anzeigen und zum Herunterladen anbieten.
Nun aber... Da die Datei gleichzeitig mit dem Datenbankeintrag heraufgeladen wird, muss ich quasi den Auto_Wert des Datenbankeintrages schon vorher wissen.

Lösungsansatz:
Bis jetzt hab ich das wie folgt gelöst:
PHP:
$query_se = "SELECT ID FROM attachment;";
            $result = mysql_query($query_se) OR die(mysql_error());
            while ($row = mysql_fetch_assoc($result)) {
                $nameneu = $row['ID']+1;
            }
            if (!isset($nameneu)) {
                $nameneu=1;
            }
Der letzte Eintrag in der Tabelle "attachment" wird ausgelesen, um "1" erhöht und in der Variable "$nameneu" gespeichert. Falls die Variable "$nameneu" nicht vorhanden ist, also noch kein Eintrag in der Datenbank ist, wird der Wert "1" zugewiesen.

Das funktioniert ja auch!
und jetzt das grosse ABER ;)
Die Datenbank sieht wie folgt aus:

-------------------------------------
| ID | Originalname |
| 1 | 16032007.pdf |
| 2 | Zeitberechnung.xls |
-------------------------------------
Zwei Anhänge sind also vorhanden, auch auf den Server kopiert. Nun löscht ein Kunde die Datei mit der ID "2".
Nun wird die nächste Datei "2" heissen, da ja durch die Abfrage die höchste ID 1 ist, die um eins erhöht wird und dann 2 wird und die Datei auf 2 getauft wird und kopiert.
Aber in der Datenbank ist die ID 3 eingetragen, da MySQL den AutoWert ja hochzählt.

Frage:
Wie kann ich den Auto_Wert voraussehen, auch wenn ein Teil gelöscht wurde?

System:
XAMPP 1.5.5
- PHP Version 5.2.0
- phpMyAdmin 2.9.1.1
- MySQL 5.0.27

Achso und ich entschuldige mich für den halben Roman, aber aus Erfahrung weis ich, dass man lieber zu viel als zuwenig über das System wissen sollte, damit man das Problem lösen kann.

mfg
Kranetierli
 
mach mal folgende Abfrage:

SHOW TABLE STATUS FROM datenbank LIKE 'tabelle'

... und lasse dir das ergebniss mit print_r ausgeben... irgendwo sollte da dann auch der naechste auto increment wert stehen
 
Hi LOK,

Danke für die schnelle Antwort. Habe dein Lösungsvorschlag grad mal eingebaut und ein paar mal getestet.

Soweit ich jetzt das sehe funktioniert es wie gewollt :)

Code:

PHP:
$query_se = "SHOW TABLE STATUS FROM database LIKE 'attachment';";
            $result = mysql_query($query_se) OR die(mysql_error());
            while ($row = mysql_fetch_assoc($result)) {
                $nameneu = $row['Auto_increment'];
            }
            if (!isset($nameneu)) {
                $nameneu=1;
            }

Es überspringt jetzt schön die gelöschten ID's :)


Danke !

[Erledigt]
 
Zurück