Voici une "petite" requête qui récupère la somme totale des temps passés, des RTT et des heures supplémentaires accumulées pour chaque employé toujours actif pour un mois donné.
La table dérivée ne semble pas provoquer de problème, en revanche, l'ensemble fait quasiment systématiquement crasher mysql...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 SELECT CONCAT( geogestion_personnel.nom, ' ', geogestion_personnel.prenom ) AS nom, SUM( total ) AS total, SUM( RTT ) AS RTT, SUM( sup ) AS sup FROM geogestion_personnel LEFT JOIN ( SELECT perso, ROUND( SUM( duration ) , 2 ) AS total, ROUND( IF( cal_flags.libelle = 'null', CASE DATE_FORMAT( cal.date, '%w' ) WHEN 1 THEN 0 WHEN 2 THEN GREATEST( 0, LEAST( 1, SUM( duration ) -7 ) ) WHEN 3 THEN GREATEST( 0, LEAST( 1, SUM( duration ) -7 ) ) WHEN 4 THEN GREATEST( 0, LEAST( 1, SUM( duration ) -7 ) ) WHEN 5 THEN 0 END , 0 ) , 2 ) AS RTT, ROUND( IF( cal_flags.libelle = 'null', CASE DATE_FORMAT( cal.date, '%w' ) WHEN 1 THEN GREATEST( 0, SUM( duration ) -7 ) WHEN 2 THEN GREATEST( 0, SUM( duration ) -8 ) WHEN 3 THEN GREATEST( 0, SUM( duration ) -8 ) WHEN 4 THEN GREATEST( 0, SUM( duration ) -8 ) WHEN 5 THEN GREATEST( 0, SUM( duration ) -7 ) END , SUM( duration ) ) , 2 ) AS sup FROM tp LEFT JOIN cal ON ( tp.date = cal.date ) LEFT JOIN cal_flags ON ( cal.flag = cal_flags.flag ) WHERE tp.date BETWEEN '2006-01-01' AND '2006-01-31' GROUP BY cal.date, perso ) AS tmp ON ( geogestion_personnel.id = tmp.perso ) WHERE geogestion_personnel.dateSortie = '0000-00-00' GROUP BY geogestion_personnel.nom, geogestion_personnel.prenom, geogestion_personnel.bureau ORDER BY geogestion_personnel.bureau ASC , nom ASC LIMIT 0 , 30
Je viens de faire un petit changement, et ça semble régler le problème :
J'ai remplacé cette ligne :
par celle-ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ORDER BY geogestion_personnel.bureau ASC , nom ASC
et il semblerait que mysql ne crash plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ORDER BY geogestion_personnel.bureau ASC, geogestion_personnel.nom ASC,geogestion_personnel.prenom ASC
Cela n'aurait donc été qu'un problème d'ambiguïté ou y a-t-il une raison plus spécifique, comme par exemple le tri sur un CONCAT qui provoquerait des crashs ?
Edit :
Je viens de refaire le test en remplaçant :
par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CONCAT(nom,' ',prenom) as nom ... ORDER BY... nom ASC
Et ça re-plante. Mysql aurait-il un bug au niveau du tri sur un CONCAT ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CONCAT(nom,' ',prenom) as nome ... ORDER BY... nome ASC
Edit2 :
C'était trop beau... Ca plante toujours avec le changement initial sur ORDER BY.
Partager