SQL-Update-Problem
Philipp
- datenbank
0 Stefan Bechtold0 Philipp0 Klaus Mock0 Stefan Bechtold0 Philipp
0 TomIRL
Hallo zusammen,
Ich habe ein neues Problem:
Ich hebe einen Block geöffnet und dann mit WHERE bestimmte Datensätze ausgefiltert.
Durch ein paar IF-Bedingungen habe ich diese wieder aufgeteilt (z.B. IF(...<=50) und IF(...>50) ).
Innerhalb dieser Bedingungen steht ein SENDMAIL und ein UPDATE.
Das mit dem Sendmail klappt einwandfrei, allerdings brauch ich ja für das Update 4 Zeilen:
UPDATE
SET
WHERE (ich will ja nicht alle ändern...)
und beim WHERE liegt das Problem; er kann innerhalb einer WHERE-Bedingung keine neue machen und ohne geht's nicht...
Gibt es da irgendeinen Ausweg?
Danke schonmal,
MfG Philipp
UPDATE
SET
WHERE (ich will ja nicht alle ändern...)und beim WHERE liegt das Problem; er kann innerhalb einer WHERE-Bedingung keine neue machen und ohne geht's nicht...
Gibt es da irgendeinen Ausweg?
Was meinst du genau mit "keine Neue machen" ?
Falls du auf der Suche nach SubQueries bist, solltest du dich mit MySQL etwas vorsehen, denn ich weiß, dass seit neueren Versionen SubQueries moeglich sind, doch inwiefern und wie gut diese auch funktionieren habe ich noch nciht getestet.
Also bitte beschreib mal genauer was du moechtest, danke.
Gruß Stefan
Hallo,
Ich hab ja oben ein where, um die Zeilen auszufiltern.
und wenn ich innerhalb dieser Bedingung mittendrin nochmal ein where setze, bringt er mir immer die Fehlemeldung:
25: SQL: Cannot insetr where condition. Requested where condition is yet an element of the list!
Und wenn ich das where vom update weglasse, macht er nicht, was ich will... das ist das Problem
Danke
Hallo,
und wenn ich innerhalb dieser Bedingung mittendrin nochmal ein where setze, bringt er mir immer die Fehlemeldung:
Wer ist "er"?
Erkläre einmal das ganze relevante Umfeld. Welche Datenbank benutzt Du, in welcher Programmierumgebung bewegst Du Dich und so weiter. Bedenke, daß wir das alles nicht erahnen können.
Grüße
Klaus
UPDATE <<tabellenname>>
SET <<variable1>> = <<wert1>>, <<variable2>> = <<wert2>>, usw...
WHERE <<bedingung1>> AND <<bedingung2>> AND usw...
Das ist eine - mir gaengige - saubere Update QUERY. Wo soll deiner Meinung nach das zweite WHERE hin? Kannst du mal deine QUERY posten?
Meine query kennt doch eh keiner... aber was solls
!#BLOCK(T_KUNDENSTAMM); // öffnet die Tabelle
!#WHERE(K_G_VORNAME=T); // sucht alle Zeilen mit T bei K_G_VORNAME
!#ORDERBY(K_DATUM_ERSTELLT_INT_DESC); // sortiert
!#LOOP; /schleift
@@VALUE=!#CALC(!#DATE(ident|now);-!#K_DATUM_ERSTELLT_INT;);@; // legt variable fest
!#IF(!#VALUE;>=134);!#IF(!#K_POPPWD;=3 Tage nach X); // eine der if-bedingungen
!#K_MAILADRESSE; wird definitiv gelöscht<br>
!#SENDMAIL(Aliasmail-Adresse !#K_MAILADRESSE;|Philipp_Tavra@gmx.de);
TEXT
!#ENDSENDMAIL;
!#UPDATEBLOCK(T_KUNDENSTAMM);
!#SET(K_POPPWD=14 Tage nach X);
!#WHERE(K_MAILADRESSE=!#K_MAILADRESSE;);
!#ENDUPDATEBLOCK;
!#ENDIF;!#ENDIF;
......
!#ENDLOOP;
!#ENDBLOCK;
!#BLOCK(T_KUNDENSTAMM); // öffnet die Tabelle
!#WHERE(K_G_VORNAME=T); // sucht alle Zeilen mit T bei K_G_VORNAME
!#ORDERBY(K_DATUM_ERSTELLT_INT_DESC); // sortiert
!#LOOP; /schleift
@@VALUE=!#CALC(!#DATE(ident|now);-!#K_DATUM_ERSTELLT_INT;);@; // legt variable fest!#IF(!#VALUE;>=134);!#IF(!#K_POPPWD;=3 Tage nach X); // eine der if-bedingungen
!#K_MAILADRESSE; wird definitiv gelöscht<br>!#SENDMAIL(Aliasmail-Adresse !#K_MAILADRESSE;|Philipp_Tavra@gmx.de);
TEXT
!#ENDSENDMAIL;!#UPDATEBLOCK(T_KUNDENSTAMM);
!#SET(K_POPPWD=14 Tage nach X);
!#WHERE(K_MAILADRESSE=!#K_MAILADRESSE;);
!#ENDUPDATEBLOCK;!#ENDIF;!#ENDIF;
......
!#ENDLOOP;
!#ENDBLOCK;
Ah ja, ich glaube dein Problem ist es, weil du in den Datensaetzen, dir du durch die WHERE Clause oben erhalten hast, nochmals ein Update machst. Sprich du fuehrst ein UPDATE auf eine Menge aus, die vorher dezimiert wurde, also quasi (und ich hoffe ich hab das Ding nicht falsch gelesen):
UPDATE (SELECT * FROM T_KUNDENSTAMM WHERE K_G_VORNAME=T ORDER BY=K_DATUM_ERSTELLT DESC) SET K_POPPWD='14 Tage nach X' WHERE K_MAILADRESSE=!#K_MAILADRESSE;
das geht natuerlich so nicht =:o)
Deine QUERY sollte so lauten:
UPDATE T_KUNDESTAMM SET K_POPPWD='14 Tage nach X' WHERE K_MAILADRESSE=!#K_MAILADRESSE AND K_G_VORNAME=T
bei einer Update darf man keine Teilmengen angeben, soweit ich weiss.
Also immer auf die ganze Tabelle beziehen.
PS: Mit QUERY meinte ich eigentlich ein SQL Skript ;o)
Danke, wusste ich nicht ;-P
PS: QUERY hab ich noch nie gehört ;-P
Danke, wusste ich nicht ;-P
PS: QUERY hab ich noch nie gehört ;-P
Hat's denn nun funktioniert oder wie darf ich diese herzhaften Smilies verstehen? =;o)
--> Wenn du zuengeln willst verweigere ich ab sofort meine Hilfe =:o)
hihi
öhhm ne die hab ich meistens in meiner freundin, wo sag ich hier lieber nicht ;-).
Ich will den anderen immer nur zeigen, was sie haben könnten *gg*
Das Problem sind ja die if-bedingungen,...
wie soll ich die in das seperate update mit einbauen???
PS ;-P
Moin Philipp,
Ich hab Dein Problem noch nicht ganz verstanden:
Eine Where Bedingung bezieht am günstigsten auf den Primärschlüssel (meist eine ID)!
Du hast Doch beim auslesen eine ID vorhanden, und dann sollte es doch kein Problem sein die WHERE Bedingung zu definieren.
Tom