 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
23.07.2008, 14:27
|
#1
|
|
TP-Member
Registriert seit: Oct 2004
|
MySQL DELETE FROM x ORDER BY y fehlermeldung
Das Problemm ist eigentlich zu dumm um es hier zu Posten. Aber laut allen Foren und Manuals sollte das funktionieren und tut es trotzdem nicht.
MySQL Version 5.0.44;
Tabelle table_test besteht aus zwei Spalten: id und test;
Mysql-Abfrage: "DELETE FROM table_test ORDER BY id";
Fehlermeldung: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY id' at line 1"
Ich möchte noch ein LIMIT hinzufügen, aber es macht keinen Sinn solange dieser Teil nicht funktioniert. Hatte jemand etwas vergleichbares?
|
|
|
23.07.2008, 14:37
|
#2
|
|
TP-Moderator
Registriert seit: Jun 2004
Ort: Hannover
|
Da brauchst du kein ORDER BY mitzugeben, da der Befehl so eh alles löscht.
Wenn du bestimmte Datensätze löschen willst, arbeite mit einer WHERE- Bedingung.
__________________
Je größer der Deppenfaktor, desto gigantischer das Bescheidwissergefühl
-Dieter Nuhr
|
|
|
23.07.2008, 14:38
|
#3
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
es geht ja um limit
Das sollte aber in jedem Fall funktionieren. Hast Du es in pma direkt probiert?
delete/update mit Order By gibts seit MySQL 4.0.0 
|
|
|
23.07.2008, 20:14
|
#4
|
|
TP-Member
Registriert seit: Oct 2004
|
Zitat:
Zitat von Adromir
Da brauchst du kein ORDER BY mitzugeben, da der Befehl so eh alles löscht.
Wenn du bestimmte Datensätze löschen willst, arbeite mit einer WHERE- Bedingung.
|
so eine antwort habe ich ja befürchtet. der gedanke dahinter ist ja simpel: man möchte aus einer tabelle nur die letzten 100 einträge übrig lassen und alles andere löschen und das möglichst in einem query.
Zitat:
es geht ja um limit
Das sollte aber in jedem Fall funktionieren. Hast Du es in pma direkt probiert?
delete/update mit Order By gibts seit MySQL 4.0.0
|
danke, das ist eine sehr gute idee. ich habe es ausprobiert und hier ist die antwort:
Fehler
SQL-Befehl:
DELETE FROM table_test ORDER BY id
MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY id' at line 1
ich benutze phpMyAdmin 2.11.5 von domaingo.de
|
|
|
23.07.2008, 20:30
|
#5
|
|
TP-Moderator
Registriert seit: Aug 2004
Ort: Kaiserslautern
|
Hallo Erdferkel,
heisst deine Tabelle tatsächlich so oder nimmst Du table_test nur als Platzhalter? Wenn Platzhalter, schreibt doch mal die echte Struktur und Statement hier rein. Allzu oft haben Leute schon Platzhalter verwendet, während die echte Tabelle aber ganz andere Spaltennamen benutzte, was letztendlich den Fehler verursacht hat. (Stichwort reservierte Keywords) Helfer raten hier dann herum und kommen auf keinen grünen Zweig, weil man mit mangelhafter Info versorgt wurde.
Ansonsten solltest Du auch wirklich entweder eine WHERE Klausel und/oder ein LIMIT mit anhängen. 10 Sekunden googlen förderten einen Eintrag im MySQL Bugtracker zutage, in dem beschrieben wird, dass MySQL (je nach Version) mit einem Error quittiert, wenn man in Verbindung mit DELETE ein ORDER BY benutzt, es aber unterläßt ein LIMIT oder ein WHERE zu benutzen. Es ist, rein von der Logik her, vollkommen unsinnig den Inhalt einer ganzen Tabelle zu sortieren um den Inhalt vorher in eine bestimmte Reihenfolge zu bringen, nur um sie dann zu löschen. Oder sortierst Du einen Stapel Zeitschriften auch erst nach Alphabet, bevor Du sie in's Altpapier wirfst? 
__________________
#.Viele Grüße, Andreas
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
.
|
|
|
23.07.2008, 21:33
|
#6
|
|
TP-Member
Registriert seit: Oct 2004
|
danke, auch dem bin ich nachgegangen.
die tabelle heißt wirklich table_test, hat zwei spalten => id (INT, auto_increment, primary_key) und test (VARCHAR, 3). die tabelle ist gefüllt mit zweihundert datensätzen. in jeder zeile hat test den wert "yes".
Die Abfrage lautet jetzt:
mysql_query("DELETE FROM table_test ORDER BY id LIMIT 10") or die(mysql_error());
Die Antwort ist wenig tröstend:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY id LIMIT 10' at line 1
!!! Ich weiss dass man dieses Problem auch umgehen kann, aber es geht mir gerade darum, dass diese Lösung nach allen Regeln klappen sollte und es doch nicht tut. Ich möchte einfach die Ursache finden. Ich hoffe ihr könnt mir dabei helfen.
|
|
|
23.07.2008, 21:42
|
#7
|
|
TP-Moderator
Registriert seit: Jun 2004
Ort: Hannover
|
Vielleicht sollte man mal schauen, welche MySQL Version es ist.
Vielleicht wäre es auch mit Subqueries möglich:
Code:
DELETE FROM table_test WHERE id <= (SELECT MAX(id) FROM table_test) LIMIT 10
__________________
Je größer der Deppenfaktor, desto gigantischer das Bescheidwissergefühl
-Dieter Nuhr
|
|
|
23.07.2008, 23:09
|
#8
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
also ich habs ausprobiert und (erwarteter Weise) keinen Fehler!
|
|
|
24.07.2008, 09:14
|
#9
|
|
TP-Member
Registriert seit: Oct 2004
|
Ich habe es gerade auch auch auf einem anderen Server ausprobiert (von 1&1) und es ging.
Der Vergleich der beiden INI-Dateien ergibt:
1&1:
Zitat:
mysql
MySQL Support enabled
Active Persistent Links 0
Active Links 1
Client API version 5.0.32
MYSQL_MODULE_TYPE external
MYSQL_SOCKET /var/run/mysqld/mysqld.sock
MYSQL_INCLUDE -I/usr//include/mysql
MYSQL_LIBS -L/usr//lib -lmysqlclient
Directive Local Value Master Value
mysql.allow_persistent On On
mysql.connect_timeout 60 60
mysql.default_host no value no value
mysql.default_password no value no value
mysql.default_port no value no value
mysql.default_socket no value no value
mysql.default_user no value no value
mysql.max_links Unlimited Unlimited
mysql.max_persistent Unlimited Unlimited
mysql.trace_mode Off Off
|
domain*go
Zitat:
mysql
MySQL Support enabled
Active Persistent Links 0
Active Links 0
Client API version 5.0.44
MYSQL_MODULE_TYPE external
MYSQL_SOCKET /var/run/mysqld/mysqld.sock
MYSQL_INCLUDE -I/usr/local/mysql/include
MYSQL_LIBS -L/usr/local/mysql/lib -lmysqlclient
Directive Local Value Master Value
mysql.allow_persistent Off Off
mysql.connect_timeout 60 60
mysql.default_host no value no value
mysql.default_password no value no value
mysql.default_port no value no value
mysql.default_socket no value no value
mysql.default_user no value no value
mysql.max_links Unlimited Unlimited
mysql.max_persistent Unlimited Unlimited
mysql.trace_mode Off Off
|
Aber woran das genau liegt weiss ich immer noch nicht. Gibt es irgendwo sonst noch MySQL-Optionen, die man nachschauen könnte, außer in der phpinfo()?
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 18:33 Uhr.
|
 |