SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 29.03.2013, 12:28:23
undnbsp undnbsp ist offline
Anfänger
 
Registriert seit: Mar 2013
Alter: 53
Beiträge: 6
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
Mit Zitat antworten
  #2  
Alt 29.03.2013, 13:56:22
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 16
Beiträge: 2.269
AW: Delete Problem

Zitat:
for the right syntax to use near ...
entweder hast du schwachsinniger Weise das wichtigste abgeschnitten, oder es ist wirklich der Punkt gemeint.

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.
Mit Zitat antworten
  #3  
Alt 29.03.2013, 18:04:26
Benutzerbild von Socrates
Socrates Socrates ist offline
Member
 
Registriert seit: Jul 2006
Ort: Göttingen/Deutschland
Alter: 36
Beiträge: 586
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
where (p.`PROD_SA`*1000000 + p.`PROD_PA`) in (2013006313,2013006314,2013006315) )
während drei Abfragen so aussehen:

Code:
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 ;
Was spricht gegen folgende Abfrage:

Code:
DELETE FROM `prod` WHERE `prod`.`PROD_ID` IN (8471, 8470, 8469);
Liebe Grüße

Andreas
__________________
BSc. Applied Computer Science
http://www.bornageek.com
Mit Zitat antworten
  #4  
Alt 30.03.2013, 05:42:17
undnbsp undnbsp ist offline
Anfänger
 
Registriert seit: Mar 2013
Alter: 53
Beiträge: 6
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

Geändert von undnbsp (30.03.2013 um 06:04:39 Uhr)
Mit Zitat antworten
  #5  
Alt 30.03.2013, 15:12:38
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
AW: Delete Problem

Zitat:
Zitat von undnbsp Beitrag anzeigen
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
Code:
DELETE FROM `test`.`prod` p 
where (p.`PROD_SA`*1000000 + p.`PROD_PA`) in (2013006313,2013006314,2013006315) )
2. 3 einzelne Delets
Code:
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`
Code:
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
Code:
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 ...
Verständlich:
Zitat:
DELETE FROM `test`.`prod` p
Zitat:
Das muß ein grundsätzlicher Syntaxfehler sein. Ich bin auch nach dem Studium des MySQL Handbuchs nicht schlauer. Was hab ich übersehen?
Das:
Code:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
MySQL will im FROM weder datenbank.tabelle noch einen Alias sehen.
Verwendest Du beim Tabellenbezeichner nen Punkt, kollidiert das damit:
Multiple-table syntax:
Code:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]
Damit kann man Referenzen killen.
Zu beachten ist auch das:
Zitat:
where_condition is an expression that evaluates to true for each row to be deleted. It is specified as described in Section 13.2.8, “SELECT Syntax”.

Currently, you cannot delete from a table and select from the same table in a subquery.
DELETE erwartet immer nur den Tabellenbezeichner.
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
Mit Zitat antworten
  #6  
Alt 30.03.2013, 18:01:05
undnbsp undnbsp ist offline
Anfänger
 
Registriert seit: Mar 2013
Alter: 53
Beiträge: 6
AW: Delete Problem

Vielen Dank! Und wieder was gelernt.

Marc
Mit Zitat antworten
  #7  
Alt 31.03.2013, 23:35:06
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
AW: Delete Problem

Zitat:
Zitat von undnbsp Beitrag anzeigen
Vielen Dank! Und wieder was gelernt.
a. fein
b. nur für die Nachwelt incl. Suchmaschinen: wie sieht die aktuelle Abfrage aus?
Mit Zitat antworten
  #8  
Alt 01.04.2013, 08:58:07
undnbsp undnbsp ist offline
Anfänger
 
Registriert seit: Mar 2013
Alter: 53
Beiträge: 6
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.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit MySQL in Typo3-CMS yamukud MySQLi/PDO/(MySQL) 0 09.10.2009 13:21:18
Subquery Problem (Verständnis?) newgame MySQLi/PDO/(MySQL) 1 29.05.2009 22:01:27
Problem mit DELETE iamgodx MySQLi/PDO/(MySQL) 0 13.03.2009 13:41:02
DELETE und Subqueries bitwurst MySQLi/PDO/(MySQL) 11 23.09.2008 15:54:11
Links zählen - Problem mit While Schleife Rick11 PHP für Fortgeschrittene und Experten 7 10.07.2008 18:05:57


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:41:00 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt