Ich versuche, Daten in einer Tabelle in sortierter Reihenfolge einzufügen, damit sie später schnell abgerufen werden können. Ich verwende eine ordinale Spalte, um die Reihenfolge der Daten anzugeben. So ähnlich:MySQL 5.1 Einfügen/Auswählen von Daten in falscher Reihenfolge
SET @ctr = -1;
insert into search_data (trans_id, ordinal)
select trans_id, @ctr:[email protected]+1
from transactions
order by created;
erstellt ist ein Datetime-Feld.
Bei der Auswahl ohne Einfügung werden die Zeilen in der richtigen Reihenfolge zurückgegeben, aber die Variable ctr wird nicht korrekt inkrementiert. Z.B .:
+---+----------+--------------+---------------------+
| 1 | trans_id | @ctr:[email protected]+1 | created |
+---+----------+--------------+---------------------+
| 1 | 131379 | 232 | 2011-10-17 12:27:09 |
| 1 | 131377 | 231 | 2011-10-17 12:24:30 |
| 1 | 131311 | 230 | 2011-10-16 23:44:12 |
| 1 | 131305 | 229 | 2011-10-16 21:57:35 |
| 1 | 129948 | 46 | 2011-10-10 13:24:58 |
| 1 | 129947 | 45 | 2011-10-10 13:24:58 |
| 1 | 129946 | 44 | 2011-10-10 13:24:58 |
| 1 | 129945 | 43 | 2011-10-10 13:24:58 |
| 1 | 129944 | 42 | 2011-10-10 13:24:58 |
Diese Technik für mich in MySQL 5.0, 4.x und 3.x gearbeitet hat Aber es funktioniert nicht in 5.1.
Es scheint, wie die Sortierung nach den Variablen getan wird erhöht, während zuvor die Variable nach der Sortierung erhöht wurde
Irgendwelche Gedanken?
subquery es? wähle trans_id, @ctr: = @ ctr + 1 aus (wähle trans_id aus den Transaktionen aus, durch created, trans_id) – Glenn
Danke, Glenn, du hast mir heute Abend eine Menge Ärger erspart. Schreibe das als Antwort und ich werde es "akzeptieren". – NXT
Danke. Ich frage mich, ob sich das Verhalten zwischen den Veröffentlichungen geändert hat? Ich weiß nichts über die mysql-Regeln, aber Oracle sagt speziell zur Unterabfrage, wenn rownum verwendet wird: Wenn eine ORDER BY-Klausel in derselben Abfrage auf ROWNUM folgt, werden die Zeilen durch die ORDER BY-Klausel neu geordnet. Die Ergebnisse können abhängig davon variieren, wie auf die Zeilen zugegriffen wird. http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm – Glenn