2017-05-20 4 views
0

Ich habe eine Tabelle mit 25.000 Einträgen und wächst. In dem Code, gibt es diese LinieHat MAX (expr) eine Grenze

$result = sqlQuery("SELECT MAX(pid)+1 AS pid FROM patient_data"); 
$newpid = 1; 

if ($result['pid'] > 1) $newpid = $result['pid']; 

Diese Zeile einen Fehler aus der Datenbank zurückgibt, die Aufzeichnung sagt Duplikat bei 10000.

Was diese Code-Zeile soll die letzte Eingabe werden tut abrufen Für die PID-Spalte fügen Sie dann die nächsten Codezeilen hinzu, um den nächsten Eintrag in der Tabelle zu erstellen.

Aus meiner Forschung MAX() ist ein Summierwerkzeug, kein Werkzeug zum Abrufen des letzten in eine Tabelle eingegebenen Wertes. https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_max

Auf der Suche nach einigen Erläuterungen zur richtigen Verwendung. Ich kann keine klare Antwort finden. Ich hoffe, dass einige erfahrene Entwickler Sie in die richtige Richtung lenken können.

+0

'summing tool'? Und was fasst es zusammen? –

+5

Auto-Inkrement erzeugt die nächste Nummer für Sie. Keine Notwendigkeit für solche Dinge. Nehmen Sie ein gutes SQL-Tutorial. –

+2

Bitte seien Sie vorsichtig. Sie versuchen, eine Methode zum Zuweisen von ID-Werten zu verwenden, die dafür bekannt sind, dass sie während der Entwicklung und des Tests korrekt arbeiten und dann - mit dem Verlust von Benutzerdaten - in der Produktion fehlschlagen. Weil: Rennbedingungen. Bitte [bearbeiten] Sie Ihre Frage, um die Ausgabe von 'SHOW CREATE TABLE patient_data' zu präsentieren, und achten Sie dann auf die Antworten, die Sie erhalten. –

Antwort

0

Da die ID-Spalte der Tabelle bereits automatisch inkrementiert wurde, gibt es in MySQL nur eine pro Tabelle erlaubte Spalte. Ich musste auf eine andere Methode zurückgreifen.

Entschieden, um mit den letzten Datensatz auf diese Weise gehen zu gehen.

$result = sqlQuery("SELECT id AS pid FROM patient_data ORDER BY id DESC LIMIT 1"); 
$newpid = 1; 

if ($result['pid'] > 1) $newpid = $result['pid'] + 1; //Changed by Sherwin 

setpid($newpid);