2011-10-13 8 views
3

J'ai recherché et je sais qu'il y a des questions similaires, mais aucune d'entre elles ne semble répondre à cette question particulière. J'essaie de connaître le nombre total de jours où un employé a travaillé selon un horaire donné. Pour ce faire, je compte le nombre total de lignes que l'employé affiche dans le tableau «horaires». Seulement, nous rencontrons un problème si l'employé est programmé deux fois le même jour.Requête PHP MySQL - groupe par date dans le champ datetime

Pour résoudre ce problème, je veux compter le nombre total de lignes et trier par DATE dans un champ DATETIME.

requête actuelle:

$days = mysql_query("SELECT emp_id FROM schedules 
        WHERE sch_id = '$sch_id' 
        AND emp_id = '$emp_data[emp_id]'"); 

$tot_days = mysql_num_rows($days); 

Je voudrais changer à:

$days = mysql_query("SELECT emp_id FROM schedules 
        WHERE sch_id = '$sch_id' 
        AND emp_id = '$emp_data[emp_id]' 
        GROUP BY start_date"); 
// "start_date" is a datetime field. Need to sort by date only YYYY-MM-DD 
$tot_days = mysql_num_rows($days); 

Toute pensée?

+0

Alors, quel est le problème avec la 2ème requête? N'est-ce pas ce que tu veux? Si vous affichez les dates et que vous vouliez le commander, il suffit d'ajouter 'ORDER BY start_date' à la fin de la 2ème. –

+0

Cela serait ordonné par le datetime exacte. Datetime descend à la seconde - deux ne se ressemblent pas. Cela doit se rapporter uniquement à la date, sans compter l'heure. – Oseer

Répondre

2

Si votre colonne start_date est un type datetime MySQL, vous pouvez utiliser les éléments suivants:

$days = mysql_query("SELECT start_date, count(*) FROM schedules 
       WHERE sch_id = '$sch_id' 
       AND emp_id = '$emp_data[emp_id]' 
       GROUP BY DATE(start_date) 
       HAVING count(*) > 1 
       ORDER BY DATE(start_date)"); 

La fonction DATE "Extrait la partie date de l'expression de date ou datetime" http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date

Cette volonté ne vous donne que les lignes où l'emp_id considéré est utilisé plus d'une fois à une date donnée. Supprimez la ligne HAVING si vous voulez tout voir.

+0

Fantastique! Je vous remercie. – Oseer