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]

Reply via email to