Hallo zusammen! Ich habe die Frage vor ein paar Tagen bereits ins MySQL-Forum gestellt, aber leider hat da noch niemand geantwortet. Jetzt versuche ich es mal mit der Liste. Wäre super, wenn mit jemand von Euch helfen könnte, weil ich hier nach Wochen des Probierens nicht weiterkomme:
Ich habe hier ein ganz komisches Verhalten einer Abfrage (Der Code ist unten). 1. Wenn ich die Abfrage direkt auf der DB ausführe, funktioniert sie perfekt 2. Wenn sie innerhalb des Programms mit einem CREATE TABLE oder INSERT INTO abläuft, liefert sie ein anderes Ergebnis: Ich habe zwei Querys. Die erste liefert mir einer temporary table, die in der zweiten dann per LEFT JOIN eingebunden wird. Die erste Query macht keine Probleme und liefert z.B. folgendes Ergbnis: 673|2006-11-20|29|NULL|12 Wenn die SELECT der zweiten Anweisung direkt z.B. über PHPMyAdmin abgesetzt wird, arbeitet sie richtig und liefert z.B.: 673|2006-11-20|12|1128|2006-11-12|0|6|6|6|1416|2006-11-24|4|0|2006-11-24|red Läuft sie dagegen mit einem CREATE TABLE oder INSERT INTO (auch aus PHPMyAdmin heraus) liefert sie: 673|2006-11-20|12|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|0|NULL|green Der Knackpunkt scheint mir die Variable @q3 zu sein, die nicht berechnet wird; nur warum nicht?!?!?!?!? Ich hoffe, mit kann jemand weiterhelfen! Kurz noch was zum Hintergrund: Die erste Abfrage liefert den aktuellen Zustand unserer Produkte sowie die Dauer der einzelnen noch nicht erledigten Tätigkeiten in Stunden. Die zweite Abfrage soll die Summe der ausstehenden Tätigkeiten errechnen, und daraus mit einem Faktor einen voraussichtliches Enddatum der Produktion errechnen. Es sollen Wochenenden berücksichtigt werden. Fällt das Enddatum auf ein Wochenende, so soll das Enddatum auf den nächsten Werktag verschoben werden. Wie gesagt, im Pronzip funktioniert das! MySQL-Version: 4.0.18-max-nt (geht leider nicht anders!) Ich habe die zweite Abfrage mal so umgebaut, dass keine Variablen mehr vorkommen und nur noch 3 Spalten erzeugt werden. Leider ändert dies aber nichts amVerhalten :-( Hier der Code: $query = 'CREATE TEMPORARY TABLE dauertemp1 (INDEX index1 (prozessid,dauer_neu)) SELECT DISTINCTROW a.id as prozessid, a.zieltermin, b.schrittnr_modul, b.schrittnr_basisschritt, c.dauer_neu FROM prozess a LEFT JOIN prozessprotokoll b ON (b.prozessid=a.id) LEFT JOIN basisschritt c ON (c.id=b.basisschrittid) WHERE (a.erledigt IS NULL OR (a.erledigt IS NOT NULL AND a.gesperrt IS NOT NULL)) AND b.erledigt IS NULL '.$where; $db->query($query,__LINE__,__FILE__); $query = 'CREATE TEMPORARY TABLE dauertemp2 (INDEX index1 (prozessid,endtermin)) SELECT prozessid, @z:=zieltermin as zieltermin, @q1:=SUM(dauer_neu) as SummeStunden, @q3:[EMAIL PROTECTED] as AnzahlStunden, @q2:=DATE_ADD(CURRENT_DATE(), INTERVAL ROUND(@q3/24) DAY) as ZielTermin1, @y1:=YEAR(@q2)-YEAR(CURRENT_DATE()) as JahresVergleich, @q4_1:=WEEK(@q2,1)-WEEK(CURRENT_DATE(),1) as AnzahlWEGleichesJahr, @q4_2:=52-WEEK(CURRENT_DATE(),1)+(@y1-1)*52+WEEK(@q2,1) as AnzahlWEDiffJahre, @q4:=IF(@y1=0,@q4_1,@q4_2) as AnzahlWochenenden, @q5:[EMAIL PROTECTED]@q4*48 as AnzahlStundenInclWochenenden, @q6:=DATE_ADD(CURRENT_DATE(), INTERVAL ROUND(@q5/24) DAY) as ZielTermin2, @q7:=WEEKDAY(@q6) as ZielWochentag, @q8:=IF(@q7>4,[EMAIL PROTECTED],0) as TageFuerVerschiebungWochenende, @e:=CAST(DATE_ADD(@q6, INTERVAL @q8 DAY) as DATE) as endtermin, IF(@z<@e,"red","green") as color FROM dauertemp1 GROUP BY prozessid'; $db->query($query,__LINE__,__FILE__); Ciao und danke! Peter _______________________________________________________________________ Viren-Scan für Ihren PC! Jetzt für jeden. Sofort, online und kostenlos. Gleich testen! http://www.pc-sicherheit.web.de/freescan/?mc=022222 -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]