Delete Problem
Hallo zusammen.
Bist jetzt habe ich alle SQL Abfragen/Statements immer mittels try and error hinbekommen. Mit einer delete Anweisung habe ich aber Probleme. Ich habe es auf verschiedene Weisen probiert und trotzdem kommt jedesmal ein Fehler. Wenn ich aus dem delete ein select * mache, läuft die Abfrage ohne Fehler. hier die verschiedenen Varianten: 1. mein Favorit, da ohne Schleife aufgebaut, Werte für WHERE aus Array DELETE FROM `test`.`prod` p where (p.`PROD_SA`*1000000 + p.`PROD_PA`) in (2013006313,2013006314,2013006315) ) 2. 3 einzelne Delets DELETE FROM `test`.`prod` WHERE `prod`.`PROD_ID` = 8471 ; DELETE FROM `test`.`prod` WHERE `prod`.`PROD_ID` = 8470 ; DELETE FROM `test`.`prod` WHERE `prod`.`PROD_ID` = 8469 ; 3. mit where über 2 Spalten DELETE FROM `test`.`prod` WHERE (`prod`.`PROD_SA` = 2013 AND `prod`.`PROD_PA` = 6315) or (`prod`.`PROD_SA` = 2013 AND `prod`.`PROD_PA` = 6314) or (`prod`.`PROD_SA` = 2013 AND `prod`.`PROD_PA` = 6313) 4. mit subselect DELETE FROM `test`.`prod` p WHERE p.`prod_id` in ( select pp.`PROD_ID` from `test`.`prod` pp where (pp.`PROD_SA`*1000000 + pp.`PROD_PA`) in (2013006313,2013006314,2013006315) ) bei allen Varianten kommt folgende Fehlermeldung, aus der der Fehler nicht zu erkennen ist: 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 ... Das muß ein grundsätzlicher Syntaxfehler sein. Ich bin auch nach dem Studium des MySQL Handbuchs nicht schlauer. Was hab ich übersehen? Ein Rechteproblem kann ich ausschließen, Recht für Delete gesetzt und an anderer Stelle klappt es auch mit dem Delete. Grüße, Marc |
AW: Delete Problem
Zitat:
Also: Du könntest mal Testcode zeigen, wie du die Verbindung aufbaust usw.. Auch das CREATE Statement wäre von interesse. Ohne ist das nicht einzugrenzen. |
AW: Delete Problem
Moin moin!
Es ist recht schwer dein Problem nachzuvollziehen, wenn man nur einen Teil der Fehlermeldung kennt, nicht weiß zu welcher Abfrage sie gehört und auch nicht das ausführende Script kennt. Außerdem verstehe ich die Zusammenhänge zwischen den einzelnen Abfragen nicht. Warum sieht eine einzelne Abfrage wie folgt aus Code:
DELETE FROM `test`.`prod` p Code:
DELETE FROM `test`.`prod` WHERE `prod`.`PROD_ID` = 8471 ; Code:
DELETE FROM `prod` WHERE `prod`.`PROD_ID` IN (8471, 8470, 8469); Andreas |
AW: Delete Problem
Guten Morgen.
@DokuLeseHemmung Die Verbindung zu Datenbank schließe ich aus, da der Select ja ohne Probleme funktioniert. CREATE TABLE `test`.`prod` ( `PROD_ID` int( 11 ) NOT NULL auto_increment , `PROD_PA` int( 11 ) NOT NULL , `PROD_SA` smallint( 4 ) default NULL , `PROD_ME` int( 11 ) default NULL , `PROD_DA` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP , `PROD_US` varchar( 20 ) collate latin1_german1_ci NOT NULL , `PROD_OR` varchar( 20 ) collate latin1_german1_ci NOT NULL , `PROD_BA_1` varchar( 20 ) collate latin1_german1_ci default NULL , `PROD_BA_2` varchar( 20 ) collate latin1_german1_ci default NULL , `PROD_BA_3` varchar( 20 ) collate latin1_german1_ci default NULL , `PROD_BA_4` varchar( 20 ) collate latin1_german1_ci default NULL , `PROD_BA_5` varchar( 20 ) collate latin1_german1_ci default NULL , `PROD_BA_6` varchar( 20 ) collate latin1_german1_ci default NULL , PRIMARY KEY ( `PROD_ID` ) , UNIQUE KEY `SaisonPartie` ( `PROD_SA` , `PROD_PA` ) ) ENGINE = MyISAM DEFA[...] Die Fehlermeldungen waren alle 4 in etwa so, dass man (ich) daraus keine Lösung ablesen konnte. Als Beispiel für die Fehlermeldung nehme ich mal die Variante 1. 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 'where (p.`PROD_SA`*1000000 + p.`PROD_PA`) in (2013006313,201300' at line 5 Ich habe die Abfrage in phpmyadmin soweit auseinandergezogen, dass in Zeile 5 nur das Wort WHERE stand. Davor und danach war eine Leerzeile. Darf man in einer DELETE-Where Klausel keine Rechenoperation durchführen? @Socrates Die verschiedenen Varianten sind aus meiner Verzweiflung heraus entstanden. Ich konnte es nicht verstehen, warum eine Abfrage als DELETE ... nicht geht, dieselbe Abfrage aber mit SELECT * ... ohne Probleme ausgeführt wird. Zur Variante 2: Ich packe alle 3 Zeilen in die Variable $delete jeweils mit Semikolon am Ende. Die Ausführung ist bei allen Varianten über die Zeile: $result = mysql_query($delete) or die("Löschen fehlgeschlagen: " . mysql_error()); Zu Deinem Vorschlag: Ich habe diese Werte 2013006313,2013006314,2013006315 bereits aus dem Array in eine Variable geschrieben. Ich kann das auch mit dem anderen Wert machen. Werde ich testen und berichten. Vielen Dank für eure Tipps. Ich hoffe, dass bringt etwas Licht in mein Dunkel. Marc |
AW: Delete Problem
Zitat:
Zitat:
Zitat:
Code:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name Verwendest Du beim Tabellenbezeichner nen Punkt, kollidiert das damit: Multiple-table syntax: Code:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] Zu beachten ist auch das: Zitat:
http://dev.mysql.com/doc/refman/5.1/en/delete.html Sollte sich die Tabelle nicht in der aktuellen sondern einer anderen Datenbank befinden, mußt Du die Datenbank wechseln: http://dev.mysql.com/doc/refman/5.1/de/use.html |
AW: Delete Problem
Vielen Dank! Und wieder was gelernt.
Marc |
AW: Delete Problem
Zitat:
b. nur für die Nachwelt incl. Suchmaschinen: wie sieht die aktuelle Abfrage aus? |
AW: Delete Problem
Also ich habe mich (warum weiss ich nicht mehr) für diese Variante entschieden:
echo des SQL: DELETE FROM test.`prod` WHERE (`PROD_SA` = 2013 AND `PROD_PA` = 6315) or (`PROD_SA` = 2013 AND `PROD_PA` = 6314) or (`PROD_SA` = 2013 AND `PROD_PA` = 6313) Ich lasse beim Auslesen der Tabelle Bzw. Füllen des Arrays auch gleichzeitig die WHERE-Syntax zusammenbauen und so sieht dann der SQL-Code aus: DELETE FROM test.prod WHERE $delete_where Bin mittlerweile auch darauf gekommen, warum meine Variante 2 nicht geklappt hat. multi_query geht nur bei mysqli. RTFM läßt grüßen. |
Alle Zeitangaben in WEZ +2. Es ist jetzt 06:40:54 Uhr. |
Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.