You are not logged in.
Pages: 1
Topic closed
GLPI 0.78.1, interface standard.
Lorsque, dans le central, je clique sur le lien correspondant à "Vos tickets à clore" dans la vue personnelle, la requête générée est formulée de la façon suivante:
SELECT `glpi_tickets`.`id` AS ITEM_0, `glpi_tickets`.`name` AS ITEM_1, `glpi_tickets`.`id` AS ITEM_1_2, `glpi_tickets`.`content` AS ITEM_1_3, `glpi_tickets`.`status` AS ITEM_1_4,`glpi_entities`.`completename` AS ITEM_2, `glpi_entities`.`id` AS ITEM_2_2, `glpi_tickets`.`status` AS ITEM_3, `glpi_tickets`.`date_mod` AS ITEM_4, `glpi_tickets`.`date` AS ITEM_5, `glpi_tickets`.`priority` AS ITEM_6, `glpi_users_users_id`.`name` AS ITEM_7, `glpi_users_users_id`.`realname` AS ITEM_7_2, `glpi_users_users_id`.`id` AS ITEM_7_3, `glpi_users_users_id`.`firstname` AS ITEM_7_4, `glpi_users_users_id_assign`.`name` AS ITEM_8, `glpi_users_users_id_assign`.`realname` AS ITEM_8_2, `glpi_users_users_id_assign`.`id` AS ITEM_8_3, `glpi_users_users_id_assign`.`firstname` AS ITEM_8_4, `glpi_ticketcategories`.`completename` AS ITEM_9, `glpi_users_users_id_recipient`.`name` AS ITEM_10, `glpi_users_users_id_recipient`.`realname` AS ITEM_10_2, `glpi_users_users_id_recipient`.`id` AS ITEM_10_3, `glpi_users_users_id_recipient`.`firstname` AS ITEM_10_4, `glpi_tickets`.`id` AS id
FROM `glpi_tickets`
LEFT JOIN `glpi_ticketvalidations` ON (`glpi_tickets`.`id` = `glpi_ticketvalidations`.`tickets_id`)
LEFT JOIN `glpi_entities` ON (`glpi_tickets`.`entities_id` = `glpi_entities`.`id`)
LEFT JOIN `glpi_users` AS glpi_users_users_id ON (`glpi_tickets`.`users_id` = `glpi_users_users_id`.`id`)
LEFT JOIN `glpi_users` AS glpi_users_users_id_assign ON (`glpi_tickets`.`users_id_assign` = `glpi_users_users_id_assign`.`id`)
LEFT JOIN `glpi_ticketcategories` ON (`glpi_tickets`.`ticketcategories_id` = `glpi_ticketcategories`.`id`)
LEFT JOIN `glpi_users` AS glpi_users_users_id_recipient ON (`glpi_tickets`.`users_id_recipient` = `glpi_users_users_id_recipient`.`id`)
WHERE ( 1 ) AND ( ( `glpi_tickets`.`status` = 'solved' ) AND (`glpi_users_users_id`.`id` = '7') OR (`glpi_users_users_id_recipient`.`id` = '7') ) GROUP BY `glpi_tickets`.`id`
ORDER BY ITEM_4 DESC
L'erreur se trouve au niveau du WHERE:
WHERE ( 1 ) AND ( ( `glpi_tickets`.`status` = 'solved' ) AND (`glpi_users_users_id`.`id` = '7') OR (`glpi_users_users_id_recipient`.`id` = '7') )
Conformément à la précédence des opérateurs dans MySQL http://dev.mysql.com/doc/refman/5.0/fr/ … dence.html , OR est exécuté avant le AND. Si l'on met des parenthèses au bout de code ci-dessus, on obtient donc:
WHERE (( 1 ) AND ( ( `glpi_tickets`.`status` = 'solved' ) AND (`glpi_users_users_id`.`id` = '7')) OR (`glpi_users_users_id_recipient`.`id` = '7') )
En d'autres termes:
1) les tickets avec statut solved et dont le demandeur a l'ID 7
OU 2) les tickets dont le rédacteur a l'ID 7
Ce qui est faux, puisque en premier lieu, ce qui nous intéresse sont les tickets "à clore", donc avec le statut solved.
Etant donné que le GUI pour formuler les requêtes ne permet pas l'utilisation de parenthèses, il faut utiliser une petite astuce:
WHERE ( 1 ) AND ( ( `glpi_tickets`.`status` = 'solved' ) AND (`glpi_users_users_id`.`id` = '7') OR (`glpi_users_users_id_recipient`.`id` = '7') AND( `glpi_tickets`.`status` = 'solved' ) )
Ce qui se formule, en tenant compte des règles de précédence:
1) les tickets avec statut solved et dont le demandeur a l'ID 7
OU 2) les tickets dont le rédacteur a l'ID 7 et dont le statut est solved
Dans le GUI, cela correspond à:
[Statut] [est] [résolu]
[AND] [Demandeur] [est] [Utilisateur 7]
[OR] [Rédacteur] [est] [Utilisateur 7]
[AND] [Statut] [est] [résolu]
Working environment: Fedora 22, GLPI 0.90.1, upgraded from 0.72.0, 0.78, 0.83 PHP/5.6.16, MySQL/10.0.21-MariaDB, Apache/2.4.17, Firefox 43
Transifex: https://www.transifex.com/accounts/profile/eiseli/
Offline
corrigé. On a le soucis sur d'autres liens.
Il faut que je regarde tout ca.
MoYo - Julien Dombre - Association INDEPNET
Contribute to GLPI : Support Contribute References Freshmeat
Offline
Pages: 1
Topic closed