SchlimmerFinger Geschrieben 8. Juli 2008 Teilen Geschrieben 8. Juli 2008 Hallo, hier kommt meine Frage, angenommen, ich habe folgende mysql Anfrage: SELECT tat.* from tbldaten dat, tblkopf kopf where dat.ID=kopf.ID and kopf.Project_Nr=300 Damit erhalte ich alle Sätze, die diesen Suchkriterien entsprechen, wie wandle ich die Anfrage jedoch so um, dass ich gerade in den Spalten die Felder ändern kann, deren Zeilen nach bestimmten Suchkriterium geliefert wurden, so wie in dem obigen Beispiel. Sagen wir mal so, ändere tbldaten.Feld1=1, tbldaten.Feld2=500 where tbldaten.ID=tblkopf.ID and kopf.Project_Nr=300 Also, dass die Änderung in Zeilen vorgenommen wird, die dem Suchkriterium entsprechen. Nach einer Lösung habe ich bisher vergeblich gesucht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 8. Juli 2008 Teilen Geschrieben 8. Juli 2008 Sowas? update tbldaten set tbldaten.Feld1=1, tbldaten.Feld2=500 where tbldaten.id in ( SELECT dat.id from tbldaten dat, tblkopf kopf where dat.ID=kopf.ID and kopf.Project_Nr=300) Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SchlimmerFinger Geschrieben 8. Juli 2008 Autor Teilen Geschrieben 8. Juli 2008 So in etwa, jedoch unterstützt installierter MYSQL Server keine verschachtelte Anfragen, das geht erst ab höheren MYSQL Versionen, und auf den Server habe ich keinen Einfluß, hinsichtlich seinem Upgrade. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
robotto7831a Geschrieben 8. Juli 2008 Teilen Geschrieben 8. Juli 2008 Und welche MySQL Version hast Du? Frank Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SchlimmerFinger Geschrieben 8. Juli 2008 Autor Teilen Geschrieben 8. Juli 2008 PHP Version 5.2.4 MYSQL 5.0.45 Wie ich gerade sehe, gar nicht mal so alt, jedoch funzen die verschachtelte Anfragen trotzdem nicht Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SchlimmerFinger Geschrieben 8. Juli 2008 Autor Teilen Geschrieben 8. Juli 2008 Ich habe genauere Fehlerquelle notiert: You can't specify target table 'tbldaten' for update in FROM clause Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 8. Juli 2008 Teilen Geschrieben 8. Juli 2008 Das hat nichts damit zu tun, das mysql keine Subselects unterstützen würde - der Update ist ganz einfach falsch: update tbldaten set tbldaten.Feld1=1, tbldaten.Feld2=500 where tbldaten.id in ( SELECT kopf.id from tblkopf kopf where kopf.Project_Nr=300); Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SchlimmerFinger Geschrieben 8. Juli 2008 Autor Teilen Geschrieben 8. Juli 2008 So hat es bei mir noch funktioniert, ich habe es so schon ausprobiert, gerade unmittelbar davor, als ich meinen Betrieb verlassen habe, mit verschachtelteten Anfrage, so wie jetzt dr.dimitri angab. Jedoch sind verschachtelte Anfragen langsamer, als die normalen, und schade, dass es anders nicht geht. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 8. Juli 2008 Teilen Geschrieben 8. Juli 2008 Langsamer als welche anderen? Sind die Felder tbldaten.id und project_nr indiziert? Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SchlimmerFinger Geschrieben 9. Juli 2008 Autor Teilen Geschrieben 9. Juli 2008 DIe Aussage kommt persönlich von Mysql Entwicklern, da jede Anfrage intern optimiert wird, um die Anfrage so schnell, wie möglich durchführen zu können. Angeblich bei einer verschachtelten Anfrage ist es nicht der Fall. Mir ist es im großen und ganzen egal, die Tatsache bleibt weiterhin die Tatsache. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.