MySQL Forums
Forum List  »  German

SELECT wird unterschiedlich ausgeführt
Posted by: peter.stoecker
Date: September 26, 2006 02:19AM

Hallo zusammen!

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:

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!)

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:=@q1*94 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:=@q3+@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,7-@q7,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

Options: ReplyQuote


Subject
Views
Written By
Posted
SELECT wird unterschiedlich ausgeführt
4059
September 26, 2006 02:19AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.