SchlimmerFinger Geschrieben 8. Juli 2008 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
robotto7831a Geschrieben 8. Juli 2008 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
SchlimmerFinger Geschrieben 8. Juli 2008 Autor 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
robotto7831a Geschrieben 8. Juli 2008 Geschrieben 8. Juli 2008 Und welche MySQL Version hast Du? Frank Zitieren
SchlimmerFinger Geschrieben 8. Juli 2008 Autor 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
SchlimmerFinger Geschrieben 8. Juli 2008 Autor Geschrieben 8. Juli 2008 Ich habe genauere Fehlerquelle notiert: You can't specify target table 'tbldaten' for update in FROM clause Zitieren
dr.dimitri Geschrieben 8. Juli 2008 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
SchlimmerFinger Geschrieben 8. Juli 2008 Autor 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
dr.dimitri Geschrieben 8. Juli 2008 Geschrieben 8. Juli 2008 Langsamer als welche anderen? Sind die Felder tbldaten.id und project_nr indiziert? Dim Zitieren
SchlimmerFinger Geschrieben 9. Juli 2008 Autor 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
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.