MYSQL bringt Einträge in Tabelle durcheinander
Phil
- php
1 Sven Rautenberg0 T-Rex
Hallo zusammen
Ich schlage mich gerade mit einem seltsamen Problem rum. Mit einem PHP-Skript schreibe ich Einträge in eine Mysql-Datenbank.
$sql = "INSERT INTO `devices` VALUES ('{$appid}', '{$appversion}', '{$devicetoken}')
ON DUPLICATE KEY UPDATE `appversion`='{$appversion}', `devicetoken`='{$devicetoken}',
$this->db->query($sql);
Seit kurzem habe ich jedoch das Problem, dass Einträge in meiner Tabelle die von meinem Skript aktualisiert werden, irgendwo und nicht mehr der Reihenfolge entsprechend abgespeichert werden.
So kann es sein, dass ein Eintrag mit dem Unique-Key 10'000 nach dem Unique-Key 1 auftaucht, nachdem dieser aktualisiert wurde.
Wie ist das möglich?
Danke!
Moin!
Ich schlage mich gerade mit einem seltsamen Problem rum. Mit einem PHP-Skript schreibe ich Einträge in eine Mysql-Datenbank.
$sql = "INSERT INTO devices
VALUES ('{$appid}', '{$appversion}', '{$devicetoken}')
ON DUPLICATE KEY UPDATE
appversion
='{$appversion}',devicetoken
='{$devicetoken}',
$this->db->query($sql);
Wenn du dich von Änderungen in der Tabelle "devices" unabhängig machen willst, solltest du unbedingt die Feldnamen mit angeben, in die die Werte eingesetzt werden! Beim nachfolgenden Update hast du das ja auch gemacht. Außerdem kennt INSERT auch eine update-ähnliche Syntax mit key='value', key='value',... - die ist vermutlich passender.
> Seit kurzem habe ich jedoch das Problem, dass Einträge in meiner Tabelle die von meinem Skript aktualisiert werden, irgendwo und nicht mehr der Reihenfolge entsprechend abgespeichert werden.
>
> So kann es sein, dass ein Eintrag mit dem Unique-Key 10'000 nach dem Unique-Key 1 auftaucht, nachdem dieser aktualisiert wurde.
>
> Wie ist das möglich?
Jedes Datenbankergebnis ist solange unsortiert und zufällig, wie du keine ORDER BY-Anweisung gegeben hast (ggf. auch implizit durch GROUP BY verursacht).
- Sven Rautenberg
Hallo zusammen
Danke für eure schnelle Antwort und die guten Tipps. Werde ich gerne berücksichtigen.
Bis vor ein paar Tagen wurden die Einträge noch nicht verschoben, geändert habe ich nichts. Es irritiert mich einfach ein wenig, es sind aber alle Datensätze da!
Auch betreibe ich eine Kopie meiner Tabelle und dort werden die Einträge auch nicht verschoben.
Wenn ihr sagt, dass dies normal ist, dann lass ich es bleiben. Also sein lassen und mit order by arbeiten?
Hi,
Bis vor ein paar Tagen wurden die Einträge noch nicht verschoben,
Richtig wäre: Bis vor ein paar Tagen war die Reihenfolge rein *zufällig* die, die du haben wolltest.
geändert habe ich nichts.
Musst du auch nicht, das kann auch die Datenbank selber gemacht haben oder der Adminstrator - bspw. eine Optimierung der Tabellen. Und damit ist der bisher für dich glückliche Zufall nicht mehr gegeben.
Auch betreibe ich eine Kopie meiner Tabelle und dort werden die Einträge auch nicht verschoben.
Noch nicht. Auch Zufall.
Also sein lassen und mit order by arbeiten?
Ja. *Immer*, wenn du Daten in einer bestimmten Reihenfolge geliefert bekommen willst, musst du das auch angeben. IdR. explizit per ORDER BY, wobei es auch implizite Sortierung bspw. durch GROUP BY gibt, wie Sven schon andeutete.
MfG ChrisB
Also gut. Ich glaube euch, damit kann ich leben :) Vielen Dank für eure tolle Hilfe. Viele Grüsse!
Wo in phpmyadmin?
Kennst du den John? Den John Wayne? Den interessiert das :D.
Ne mal im ernst, solange alle Einträge in der Datenbank richtig sind und keine Ids durcheinander gewirbelt werden ist die Sortierung in einem "Hilfstool" doch total egal!
T-Rex
Gruß