Page 1 sur 1

Doublon dans la liste des demandeurs d'un ticket

Posté : jeu. 9 mai 2019 16:07
par JoshuaSign_
Bonjour,

Je suis tombé sur un cas de figure particulier : lorsque l'on est sur un ticket qui a été importé, mais dont le demandeur n'a pas été trouvé en base, le ticket est alors créé pour le user (demandeur) id:0 "Aucun"
Alors, dans la "liste des demandeurs", l'option "Aucun" appaît 2 fois. Je suis dans le cas ou ticket_user_company != 0 (le nom de la société apparait dans la liste)

De mon point de vue l'erreur se produit car l'utilisateur "Aucun" qui a l'id 0 est aussi un user qui a disable=0 : le code php étant une série de if (sans else if), cela peut produire 2 fois la meme option (on le constate dans le code source de la page).

D'autre part, en analysant de plus pres la requete qui est faite, j'ai l'impression qu'un DISTINCT a été ajouté (sans doute pour gérer ce cas de figure) mais pour autant, comme tuser.* est appelé, ce DISTINCT ne fera jamais rien : les clé primaire sont récupérées et donc chaque ligne est déjà distincte.

J'ai préféré ajouter le nom de la company dans le select, permettant ainsi d'élliminer la requete suivante qui récupère le nom de la company pour chaque tuser.
Il me semble que cette façon sera plus rapide à l'execution (nous avons actuellement 40 000 demandeurs potentiels et prévoyons d'en avoir 100 000 à terme)

Voici la modification que j'ai apportée :
fichier ticket.php - dans la section "<!-- START sender list part -->"

Code : Tout sélectionner

//define order of user list in case with company prefix
if($rright['ticket_user_company']!=0) {
        $query = $db->query("SELECT tusers.id as id
		, tusers.lastname as lastname
		, tusers.firstname as firstname
		, tusers.disable as disable
		, tusers.company as company
		, tcompany.name as user_company
		FROM `tusers` 
		LEFT JOIN tcompany ON tusers.company=tcompany.id 
		WHERE (tusers.lastname!='' OR tusers.firstname!='')  
		ORDER BY tcompany.name, tusers.lastname, tusers.firstname");
} else {
        $query = $db->query("SELECT tusers.id as id
		, tusers.lastname as lastname
		, tusers.firstname as firstname
		, tusers.disable as disable 
		FROM `tusers` 
		WHERE (lastname!='' OR firstname!='')  
		ORDER BY lastname ASC, firstname ASC");
}
//display user list and keep selected an disable user
while ($row = $query->fetch()) {
        if($rright['ticket_user_company']!=0 && $row['company']!=0)
        {
                $user_company='['.$row['user_company'].'] ';
        } else {
		$user_company='';
	}

        if ( $_POST['user']==$row['id'] || ( $_POST['user']=='' && $globalrow['user']==$row['id'] ) ) {
		$selected='selected';
	} else {
		$selected='';
	}

        if ($row['id']==0) { //case no user
		echo '<option '.$selected.' value="'.$row['id'].'">'.T_(" $row[lastname]").' '.$row['firstname'].'</option>';
	} else  if ($row['disable']==0) { //all enable users and technician
		echo '<option '.$selected.' value="'.$row['id'].'">'.$user_company.$row['lastname'].' '.$row['firstname'].'</option>';
	} else if ($row['disable']==1 && $selected=='selected') { //case disable user always attached to this ticket
		echo '<option '.$selected.' value="'.$row['id'].'">'.$row['lastname'].' '.$row['firstname'].'</option>';
	} 
}

Re: Doublon dans la liste des demandeurs d'un ticket

Posté : jeu. 9 mai 2019 17:17
par Flox
Bonjour,

je n'arrive pas à reproduire le problème de mon côté, pouvez vous le reproduire sur la webdemo, et indiquer les étapes réalisées ?
2019-05-09 17_13_58-screenshot-zensoft.png
2019-05-09 17_13_58-screenshot-zensoft.png (6.5 Kio) Vu 5957 fois
L'optimisation SQL à été intégrée dans la version 3.1.41, Merci.


Cdt

Re: Doublon dans la liste des demandeurs d'un ticket

Posté : jeu. 9 mai 2019 18:17
par JoshuaSign_
Exact !

Mon erreur etait ici : " l'erreur se produit car l'utilisateur "Aucun" qui a l'id 0 est aussi un user qui a disable=0 " -> c'est faux, en principe Aucun doit etre en disable = 1

Ce user avait été supprimé, par erreur sans doute, et lorsque nous l'avons recréé nous avons oublié de le mettre en disable = 1, du coup il apparaissait en double.

Désolé pour cette erreur et Merci pour l'intégration de la partie SQL.

Re: Doublon dans la liste des demandeurs d'un ticket

Posté : jeu. 9 mai 2019 18:20
par Flox
Très bien,merci pour votre retour.

bonne journée

Re: Doublon dans la liste des demandeurs d'un ticket

Posté : sam. 17 août 2019 01:58
par amekassa90
JoshuaSign_ a écrit : jeu. 9 mai 2019 18:17 Exact !

Mon erreur etait ici : " l'erreur se produit car l'utilisateur "Aucun" qui a l'id 0 est aussi un user qui a disable=0 " -> c'est faux, en principe Aucun doit etre en disable = 1

Ce user avait été supprimé, par erreur sans doute, et lorsque nous l'avons recréé nous avons oublié de le mettre en disable = 1, du coup il apparaissait en double.

Désolé pour cette erreur et Merci pour l'intégration de la partie SQL.
Je suis tombé sur un cas de figure particulier : lorsque l'on est sur un ticket qui a été importé, mais dont le demandeur n'a pas été trouvé en base, le ticket est alors créé pour le user (demandeur) id:0 "Aucun"

Re: Doublon dans la liste des demandeurs d'un ticket

Posté : jeu. 22 août 2019 01:46
par JoshuaSign_
c'est le fonctionnement normal... imho