2016-04-13 6 views
1

Ich versuche, die maximale ID-Nummer für eine Person zu ergreifen, erhöhen sie um eins, und speichern Sie in einer Variablen. Ich habe NULL bekommen, bis ich die Variable auf 0 initialisiert habe. Jetzt bekomme ich nur 0. Kannst du mir helfen?MySQL - Holen Sie sich einen Max-Wert von Spalte, dann speichern in Variable

--Initialize @Var (probably unnecessary) 
SET @Var = 0; 

-- Increment Max Value by 1, store in @Var 
Select @Var = (MAX(Person_ID) + 1) From Person; 

--prints out the value 0???? 
Select @Var 

Antwort

3

MySQL verwendet := in SELECT Werte einzustellen. So verwenden:

Select @Var := (MAX(Person_ID) + 1) From Person; 

Die Verwendung von = nur für einen boolean Ausdruck ist. Also würde die SELECT (mit =) wahr/falsch (1/0) zurückgeben, aber keine Werte zuweisen.

+0

wie ein Charme. Ich schätze es sehr, obwohl es eine einfache Anfrage war. – FoxDonut

0

Ich wollte @Gordon Linoff Antwort hinzufügen, dass es besser für die Leistung wäre, wenn Sie die aktuelle ID abrufen, indem Sie durch person_id Bestellung und den ersten Datensatz der Auswahl:

Select top 1 person_id from person order by person_id DESC 
+1

Ich schätze Ihre Gedanken hier - aber wie sicher sind Sie, dass die Bestellung eines Tischs schneller wäre, als den Maximalwert zu finden? Ich meine, unabhängig davon, dass ich weiß, dass der Maximalwert immer unten ist, wird das Programm eine lineare Suche durchführen, um zu finden, dass max. Ich frage mich nur, ob eine lineare Suche und Sortierung nicht zur gleichen Leistung führen würde? Bestellung müsste buchstäblich alle Datensätze außer sehr mittleren Datensatz tauschen? Das ist etwas rhetorisch, aber wenn Sie es beantworten können, würde ich das Wissen schätzen. – FoxDonut

+0

MAX ist eine Gruppierungsfunktion und Sie müssten gruppieren nach (was Sie nicht tun). Der Unterschied zwischen MAX und Ordering ist deutlicher, wenn wir von einer Tabelle mit Tausenden von Datensätzen sprechen. Je mehr Datensätze Sie haben, desto länger dauert die Gruppierung und Sie finden den MAX-Wert. – Erick

+0

Ah, ich verstehe. Das macht jetzt ziemlich viel Sinn. Ich habe mich gefragt, was diese "Gruppierungsfehler" waren, hahah – FoxDonut

Verwandte Themen