Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3320[/thread]

Erweiters DELETE-Statement: MySQL



<< >> 9 Einträge, 1 Seite
format_c
 2003-08-26 23:21
#32148 #32148
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hi.
Ich brauche eine DELETE Statement das mit Eintr#ge aus einer Datei löscht wo aber die Werte für die WHERE Klausel in einer andern Tabelle geprüft werden müssen.
Ich zeig euch einfach mal das bestehende nicht funktionierende Statement:
[sql]DELETE FROM warenkorb WHERE sid =
SELECT s.sid FROM sessions AS s
WHERE time <'$expired'/;
[/sql]

Ich denke aus diesem Statement sollte sich meine Absicht herauskristalisieren.

Gruß Alex
Relais
 2003-08-26 23:27
#32149 #32149
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[sql]DELETE FROM warenkorb WHERE sid
IN (
SELECT sid
FROM sessions
WHERE time >= $expired
)
;
[/sql]
8)\n\n

<!--EDIT|Relais|1061926109-->
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
format_c
 2003-08-26 23:48
#32150 #32150
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hab jetzt mal manuell eine Eintrag in die Tabell warenkorb hinzugefügt bei der der Wert sid gleich der Wert id aus der Tabelle visitors meines Datensatzes ist.
Einfach damit ich es besser nachvollziehen kann.

Theoretisch müsste er mir den Eintrag aus warenkorb löschen in dem das Feld sid den Wert (hier 18) meines Records aus der Tabelle visitors hat.
*Auch nicht besser_*
Ich zeigs einfach:
Die visitors-Tabelle
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT email,id FROM visitors;
+--------------------------------+----+
| email | id |
+--------------------------------+----+
| [EMAIL=webmaster@creedforever.com]webmaster@creedforever.com[/EMAIL] | 8 |
| [EMAIL=format_c@perl-community.de]format_c@perl-community.de[/EMAIL] | 18 |
| [EMAIL=koeppe@oreg.de]koeppe@oreg.de[/EMAIL] | 9 |
| [EMAIL=spawn2011@aol.com]spawn2011@aol.com[/EMAIL] | 16 |
| [EMAIL=musteradresse@creedforever.com]musteradresse@creedforever.com[/EMAIL] | 13 |
+--------------------------------+----+
5 rows in set (0.00 sec)

mysql>

Die warenkorb Tabelle:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
mysql> SELECT sid FROM warenkorb;
+-----------------------+
| sid |
+-----------------------+
| adljasdf956a43sdfadsf |
| 18 |
+-----------------------+
2 rows in set (0.00 sec)

mysql>


Und der Versuch den Eintrag mit der "18" aus der warenkorb-Tabelle zu löschen...
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> DELETE FROM warenkorb
-> WHERE sid
-> IN (
-> SELECT id
-> FROM visitors
-> WHERE email='format_c@perl-community.de'
-> )
->;
ERROR 1064: You have an error in your SQL syntax near 'SELECT id
FROM visitors
WHERE email='format_c@perl-community.de'
)' at line 4
mysql>


Gruß Alex
jan10001
 2003-08-27 00:35
#32151 #32151
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Versuche es mal so:

Code: (dl )
DELETE warenkorb FROM visitors, warenkorb WHERE warenkorb.sid=visitors.id
\n\n

<!--EDIT|jan10001|1061930184-->
format_c
 2003-08-27 00:48
#32152 #32152
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Auch nicht.

Ich schmeiß micht nochmal an die (diesmal die deutsche) Doku von MySQL.

Gruß Alex
jan10001
 2003-08-27 00:56
#32153 #32153
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Hm, wenn du MySQL 4.0 hast müßte es gehen. (Abgesehen von dem fehlenden ";" am Ende.)
format_c
 2003-08-27 01:10
#32154 #32154
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
MMh hab 3.23
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
server:~ # mysql
Welcome to the MySQL monitor. Commands end with; or \g.
Your MySQL connection id is 62 to server version: 3.23.52-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use shop
Database changed
mysql> DELETE warenkorb FROM visitors, warenkorb WHERE warenkorb.sid=visitors.id;
ERROR 1064: You have an error in your SQL syntax near 'warenkorb FROM visitors, warenkorb WHERE warenkorb.sid=visitors.id' at line 1
mysql>

Noch Rat?

Gruß Alex
Shagreen
 2003-08-27 01:48
#32155 #32155
User since
2003-08-14
88 Artikel
BenutzerIn
[Homepage] [default_avatar]
Dann mußt Du 2 SQL-Befehle absetzen. Das DELETE-Statement bereitest Du am besten mit dem Platzhalter für die sid vor (prepare). Beim Durchlaufen der Ergebnisreihen aus dem SELECT übergibst Du dann dem execute() nur noch die sid.
format_c
 2003-08-27 01:58
#32156 #32156
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Muahaha *schüttel*
Naja so wollt ich es eigendlich nicht machen aber wenn das DELETE Statement halt so stur ist..

Danke auf jeden Fall für eure Hilfe

Gruß ALex
<< >> 9 Einträge, 1 Seite



View all threads created 2003-08-26 23:21.