You are not logged in.
Pages: 1
Topic closed
Bonjour à tous,
Je souhaiterai pouvoir récupérer la liste des tickets rattachés aux demandeurs si c'est dernier ont plus d'un ticket ouverts, du coup sans rentrer dans les détails de la requête (si ticket non clos-non résolus, et si demandeurs) la simple requête suivante ne marche pas :
SELECT * FROM glpi_tickets join glpi_tickets_users on glpi_tickets.id = glpi_tickets_users.tickets_id where (COUNT(glpi_tickets_users_id)>1)
Si quelqu'un de calé peut me donner un coup de pouce.
Merci
Offline
Salut,
La 1er erreur est qu'il n'y a pas de table glpi_tickets_users_id . Tu as mis un underscore au lieu d'un point glpi_tickets_users.id
Essaye un truc comme ça (ça c'est pour un utilisateur que tu défini) :
SELECT * FROM glpi_tickets join glpi_tickets_users on glpi_tickets.id = glpi_tickets_users.tickets_id where glpi_tickets_users.users_id = (SELECT ID FROM glpi_users where name = "xxxxxx") AND glpi_tickets.status < 5;
Remplace xxxxx par un sAMAccountName (Toto DUPONT = tdupont).
++
Last edited by noircc (2016-07-27 15:43:33)
Offline
Merci noircc de ton aide
J'ai essayé autre chose mais c'est toujours la condition (si les utilisateurs ont plus d'un ticket assignés) :
SELECT * FROM glpi_tickets, glpi_tickets_users WHERE (status != "5" and status != "6") && glpi_tickets_users.tickets_id = glpi_tickets.id && glpi_tickets_users.type = 1 order by glpi_tickets_users.users_id
peut-etre as tu ma reponse mais il me faut pour tous les utilisateurs de la bdd... car je vais ensuite lister ces tickets.
Offline
re,
Cela ne va peut être pas te servir mais je suis plus PowerShell donc voici un code qui fonctionne :
1er partie : Liste les utilisateurs de la table "Glpi_users" qui sont en demandeur d'au moins 1 ticket.
2eme partie : Compte le nombre de ticket par utilisateur, qui ne sont pas résolu/fermé, ne prend en compte pour la suite que ceux ayant plus d'1 ticket d'ouvert.
3eme partie : Export certaines infos (entities_id, name, date, status) des tickets des utilisateurs sélectionnés ci-dessus dans un fichier texte
[void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")
$port = "3306"
$srv= "127.0.0.1"
$user = "xxxxxx"
$mdp = "xxxxxxxxx"
function DATABASE
{
$cn = New-Object MySql.Data.MySqlClient.MySqlConnection
$cn.ConnectionString = "server=$srv;port=$port;uid=$user;pwd=$mdp;database=glpi"
$cn.Open()
$cm = New-Object -TypeName MySql.Data.MySqlClient.MySqlCommand
$sql = 'SELECT distinct(a.name) as "NomUsers" from glpi_users as a, glpi_tickets_users as b where a.id = b.users_id && b.type = 1'
$cm.Connection = $cn
$cm.CommandText = $sql
$dr = $cm.ExecuteReader()
while ($dr.Read())
{
$name += $dr.GetValue($1)+";"
}
$cn.Close()
$names = $name.split(";")
foreach ($users in $names)
{
$sql2 = 'SELECT COUNT(*) FROM glpi_tickets join glpi_tickets_users on glpi_tickets.id = glpi_tickets_users.tickets_id where glpi_tickets_users.users_id = (SELECT ID FROM glpi_users where name = "'+$users+'") AND glpi_tickets.status < 5 AND glpi_tickets_users.type = 1'
$cn2 = New-Object MySql.Data.MySqlClient.MySqlConnection
$cn2.ConnectionString = "server=$srv;port=$port;uid=$user;pwd=$mdp;database=glpi"
$cn2.Open()
$cm2 = New-Object -TypeName MySql.Data.MySqlClient.MySqlCommand
$cm2.Connection = $cn2
$cm2.CommandText = $sql2
$dr2 = $cm2.ExecuteReader()
while ($dr2.Read())
{
$ticket = $dr2.GetValue($1)
if ($ticket -gt 1)
{
$result = $users+" a "+$ticket+" ticket(s) non resolu"
$result
$usersticket += $users+";"
}
}
$cn2.Close()
}
$usertickets = $usersticket.split(";")
$hello = "Nom utilisateur" + ";" + "entities_id" + ";" + "titre du ticket" + ";" + "date d ouverture" + ";" + "status"
$hello | Out-File C:\Users\Administrateur\Desktop\test.txt
foreach ($userstickets in $usertickets)
{
$sql3 = 'SELECT entities_id, name, date, status FROM glpi_tickets join glpi_tickets_users on glpi_tickets.id = glpi_tickets_users.tickets_id where glpi_tickets_users.users_id = (SELECT ID FROM glpi_users where name = "'+$userstickets+'") && glpi_tickets.status < 5 && glpi_tickets_users.type = 1'
$cn3 = New-Object MySql.Data.MySqlClient.MySqlConnection
$cn3.ConnectionString = "server=$srv;port=$port;uid=$user;pwd=$mdp;database=glpi"
$cn3.Open()
$cm3 = New-Object -TypeName MySql.Data.MySqlClient.MySqlCommand
$cm3.Connection = $cn3
$cm3.CommandText = $sql3
$dr3 = $cm3.ExecuteReader()
while ($dr3.Read())
{
$0 = $userstickets
$1 = $dr3["entities_id"]
$2 = $dr3["name"]
$3 = $dr3["date"]
$4 = $dr3["status"]
if ($4 -eq 1) {$status = "Nouveau"}
elseif ($4 -eq 2) {$status = "En cours (Attribué)"}
elseif ($4 -eq 3) {$status = "En cours (Planifié)"}
elseif ($4 -eq 4) {$status = "En attente"}
elseif ($4 -eq 5) {$status = "Résolu"}
elseif ($4 -eq 6) {$status = "Clos"}
elseif ($4 -eq 7) {$status = "Acceptée"}
elseif ($4 -eq 8) {$status = "observe"}
elseif ($4 -eq 9) {$status = "evaluation"}
elseif ($4 -eq 10) {$status = "approbation"}
elseif ($4 -eq 11) {$status = "test"}
elseif ($4 -eq 12) {$status = "qualification"}
else {$status = $4}
Add-Content C:\Users\Administrateur\Desktop\test.txt $0";"$1";"$2";"$3";"$status
# $ticketResult = [string]::Format($dr3["entities_id"], $dr3["name"], $dr3["date"])
# $ticketResult
}
$cn3.Close()
}
}
DATABASE
Voici ce que l'export donne :
++
Last edited by noircc (2016-07-28 14:32:20)
Offline
Bonjour,
pouquoi ne mettez vous pas la condition sur le nombre dans HAVING
select *...
from ....
Where statut en cours
GROUP BY demandeur
HAVING count(glpi_tickets.id>1)
Trouver la panne avant de réparer...
GLPI10.0.16 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.3 reports 1.16.0 formcreator 2.13.9, datainjection 2.13.5 fields 1.21.9
Offline
Bonjour LaDenrée :
LA requete suivante avec ton aide me donne qu'un resultat:
SELECT * FROM glpi_tickets, glpi_tickets_users WHERE (status != "5" and status != "6") && glpi_tickets_users.tickets_id = glpi_tickets.id && glpi_tickets_users.type = 1 HAVING count(glpi_tickets_users.users_id>1) order by glpi_tickets_users.users_id
Donc HAVING count(glpi_tickets_users.users_id>1) n'est pas la bonne syntaxe je pense...
Offline
oups,
c'est la parenthèse qui ne va pas :
HAVING count(glpi_tickets_users.users_id)>1
Trouver la panne avant de réparer...
GLPI10.0.16 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.3 reports 1.16.0 formcreator 2.13.9, datainjection 2.13.5 fields 1.21.9
Offline
J'ai testé aussi mais nan
Offline
il manque aussi le group by !
la requète ci dessous marche aussi pour les anciennes versions : ()
SELECT glpi_users.realname AS DEMANDEUR, count(glpi_tickets.ID) AS nbticket
FROM glpi_tickets
JOIN glpi_tickets_users ON glpi_tickets_users.tickets_id = glpi_tickets.id AND glpi_tickets_users.type = 1
JOIN glpi_users ON glpi_users.id= glpi_tickets_users.users_id
WHERE (status != "5" and status != "6" and status != "solved" and status != "closed")
GROUP BY DEMANDEUR
HAVING nbticket>1
Trouver la panne avant de réparer...
GLPI10.0.16 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.3 reports 1.16.0 formcreator 2.13.9, datainjection 2.13.5 fields 1.21.9
Offline
Bonjour LaDenrée :
Le resultat de ta requete me donne ceci :
"nomvide" 138
"Nouveau Client" 7
J'ai reussi a pondre quelque chose grace a noircc mais j'arrive tout de meme pas a fusionner les requetes ensemble pour optimiser le code :
//liste des clients ayants plus d'un ticket ouverts
$req1 = $bdd->query('SELECT distinct(a.name) as "NomUsers" from glpi_users as a, glpi_tickets_users as b where a.id = b.users_id && b.type = 1');
while ($rep1 = $req1->fetch()) {
$users = $rep1['NomUsers'];
$req2 = $bdd->query("SELECT COUNT(*) as count FROM glpi_tickets join glpi_tickets_users on glpi_tickets.id = glpi_tickets_users.tickets_id where glpi_tickets_users.users_id = (SELECT ID FROM glpi_users where name = '$users') AND glpi_tickets.status < 5 AND glpi_tickets_users.type = 1");
while ($rep2 = $req2->fetch()) {
if ( $rep2['count'] >1) {
echo '<tr><td>'.utf8_encode($users).'</td><td>'.$rep2['count'].'</td></tr>';
}
}
}
Last edited by locehen (2016-07-29 10:46:31)
Offline
bonjour,
c'est probablement que le champ realname est vide.
vos tickets ont bien un demandeur de renseigné ?
essayez ça :
SELECT glpi_users.name AS DEMANDEUR, count(glpi_tickets.ID) AS nbticket
FROM glpi_tickets
JOIN glpi_tickets_users ON glpi_tickets_users.tickets_id = glpi_tickets.id AND glpi_tickets_users.type = 1
JOIN glpi_users ON glpi_users.id= glpi_tickets_users.users_id
WHERE (status != "5" and status != "6" and status != "solved" and status != "closed")
GROUP BY DEMANDEUR
HAVING nbticket>1
Trouver la panne avant de réparer...
GLPI10.0.16 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.3 reports 1.16.0 formcreator 2.13.9, datainjection 2.13.5 fields 1.21.9
Offline
LADenrée je n'ai qu'un mot et une réplique : Merci ! et vient t'y boire un chtit coup à l'occasion
Offline
un p'tit canon sauve un vigneron, malheureusement, la corse est diamétralement opposée à ma destination de vacances 2016
Trouver la panne avant de réparer...
GLPI10.0.16 (ubuntu 22.04 PHP8.1 Mariadb10.6 ) plugins : comportements 2.7.3 reports 1.16.0 formcreator 2.13.9, datainjection 2.13.5 fields 1.21.9
Offline
Pages: 1
Topic closed