2017-10-10 1 views
0

Ich habe eine Abfrage, wo ich die Arbeitszeit für jeden Benutzer berechnen.Timediff Calucate, wo Abfrage

$sql = " 
SELECT actief 
    , userid 
    , DATE_FORMAT(datum, '%x - %V') 
    , username 
    , min_urenperweek 
    , SEC_TO_TIME(SUM(TIME_TO_SEC(tijd_tot) - TIME_TO_SEC(tijd_van))) timediff 
    FROM " . TBL_URENREGISTRATIE . " ur 
    JOIN " . TBL_CMS_USERS . " us 
    ON us.userid = ur.userid 
GROUP 
    BY YEARWEEK(datum) 
    , userid 
ORDER 
    BY us.username ASC 
    " ; 

, was ich will, ist: Wenn der min_urenperweek lässt seine sagen 40 Stunden und die timediff ist mehr als 40 Stunden, ich will nicht, um es zu zeigen, wenn es weniger als 40 dann will ich es zeigen

ich versuchte Where min_urenperweek <= timediff, aber es funktioniert nicht

+0

Sie könnten HAVING verwenden, was nach der GROUP BY-Klausel steht – Strawberry

+0

Haben Sie vielleicht ein Beispiel, wie ich das verwenden kann? – Kevin

+0

Vielleicht möchten Sie DATE_FORMAT einen Alias ​​geben – Strawberry

Antwort

1
  1. Sie sollten die gleichen Felder in der GROUP BY Klausel, die nicht in Ihrem SELECT Klausel haben, die keine Aggregatfunktionen sind.

  2. Sie können keinen Alias ​​aus Ihrer SELECT Klausel in Ihrer WHERE Klausel angeben.

  3. Wenn Sie die Ergebnisse Ihrer Aggregate filtern möchten, können Sie das nicht in der WHERE Klausel, die HAVING Klausel existiert zu diesem Zweck

etwas Versuchen Sie, wie dieses

$sql = " 
SELECT actief 
    , userid 
    , DATE_FORMAT(datum, '%x - %V') 
    , username 
    , min_urenperweek 
    , SEC_TO_TIME(SUM(TIME_TO_SEC(tijd_tot) - TIME_TO_SEC(tijd_van))) timediff 
    FROM " . TBL_URENREGISTRATIE . " ur 
    JOIN " . TBL_CMS_USERS . " us 
    ON us.userid = ur.userid 
GROUP 
    BY actief 
    , userid 
    , DATE_FORMAT(datum, '%x - %V') 
    , username 
    , min_urenperweek 
HAVING min_urenperweek <= timediff 
ORDER 
    BY us.username ASC 
    " ; 
+0

Vielen Dank, es funktioniert fast krank finden Sie es heraus: D – Kevin

+1

Graag gedaan ;-) –