Das Problem ist so alt wie die Welt selbst - wie in MySql wissen um den Wert des nächsten ID, vorausgesetzt, dass der ID-Wert durch AUTO_INCREMENT erzeugt wird.
Tokay Bedürfnisse können in zwei Fällen auftreten:
- Erstellen Sie ein neues Konto, und verwenden Sie dann novopoluchennuyu ID aufzeichnen.
- Führen Sie die Verarbeitung Wert vor der eigentlichen Aufnahme erstellt wird. Zum Beispiel zu generieren Wert SSID direkt auf die ID zusammen.
Wenn Sie den Wert erhalten, nachdem der Datensatz erstellt wurde
1. In nahezu jeder Sprache, einschließlich PHP, gibt es eine Methode, um den Wert IDposledney erstellt Datensatz zu erhalten. Wenn die Datensätze von mehr als einer erstellt, diese Methode gibt nur noch der letzte Eintrag.
mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", mysql_insert_id());
2. In der Trigger-Wert der neuen Datensätze können mit dem Alias erhalten werden, NEU, vorausgesetzt, dass der Abzug nach ausgeführt wird (nach). Es sei darauf hingewiesen, dass weitere Änderungen sind nicht zulässig Eintrag, aber dieses Szenario ist geeignet, wenn die Operationen zu anderen Tabellen durchgeführt werden.
3. Wenn die Intensität der Aufzeichnungen nicht mehr, können Sie schrauben und diese Methode - SELECT max (ID) AS curr_id FROM my_table.
Wenn Sie möchten, den Wert zu erhalten, bevor der Datensatz erstellt wurde
1. Es ist nicht zuverlässig, aber theoretisch die Methode -
SELECT max(ID) + 1 AS next_id FROM my_table
Unzuverlässige, zum Beispiel, wenn der nächste Datensatz hat, und der Wert zugewiesen AUTO_INCREMENT gelöscht wurde, wird es niemand werden.
2. In einer mittelgroßen PHPmozhno übernehmen den Status der Tabelle:
Das gleiche Prinzip könnte in einem Trigger verwendet werden, aber ich weiß nicht, wie man MySQL verwenden, können Sie den Wert des Array zu lesen.
function get_menu_id($menu) {
$result = mysql_query("SHOW TABLE STATUS LIKE 'menu'");
$rows = mysql_fetch_assoc($result);
return $rows['auto_increment'];
}
3. Schreiben Sie eine Funktion, dass der MySQL AUTO_INCREMENT-Wert liest direkt aus den Informationen Tabelle.
CREATE FUNCTION next_id(_TABLE varchar(255)) RETURNS int(11)
BEGIN
DECLARE _NEXT_ID INT(11) DEFAULT 0;
SELECT AUTO_INCREMENT FROM information_schema.`tables`
WHERE TABLE_SCHEMA = „my_db” AND TABLE_NAME = _TABLE
INTO _NEXT_ID;
RETURN _NEXT_ID;
END;
Auf wie Informationen Schema enthält Daten über alle Tabellen und alle Datenbanken, dann muss der Antrag angeben, wie der Tabelle und Boden.