You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2010-12-14 09:34:20

eiseli
Member
From: Switzerland
Registered: 2008-06-10
Posts: 148

Requête mal formulée

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

#2 2010-12-14 10:22:16

MoYo
GLPI - Lead
From: Poitiers
Registered: 2004-09-13
Posts: 14,513
Website

Re: Requête mal formulée

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

Board footer

Powered by FluxBB