I have an HR Queue where I want to email the submitter when the status of the ticket is changed from "Open to "Password Changed....."  Below is my SQL and instead of the submitter getting an email only when this event happens, they get emailed every single time any other change is made after the status is changed to "Password Changed..."  Example: I change the status to Password Changed, they get an email.  If I go back in change a date field for example, the get the same resulting email.  I only want this to happen when the description of the last change is like "Open" to "Password Changed/Email Fwd".  When I run this in MySQL Workbench, I get the exact results of four open tickets that match this Where statement.  Is there something else that I am missing?

SELECT

      -- ticket fields
      HD_TICKET.CC_LIST, -- $CC_LIST

      HD_TICKET.ID, -- $id

      HD_TICKET.ID AS TICKNUM, -- $ticknum

      HD_TICKET.TITLE, -- $title

      DATE_FORMAT(HD_TICKET.CREATED,'%b %d %Y %I:%i:%s %p') AS CREATED, -- $created

      -- change fields

      C.COMMENT, -- $comment

      C.DESCRIPTION, -- $description

      GROUP_CONCAT(CONCAT('----- Change by ', UPDATER.EMAIL,' at ',H.TIMESTAMP,' -----\n',

       H.DESCRIPTION,'\n',H.COMMENT,'\n\nPlease see your ticket at http://k1000/userui/ticket.php?ID=',H.HD_TICKET_ID,'\n')

       ORDER BY H.ID DESC SEPARATOR '\n') HISTORY, -- $history

      -- about the updater

      UPDATER.USER_NAME AS UPDATER_UNAME, -- $updater_uname

      UPDATER.FULL_NAME AS UPDATER_FNAME, -- $updater_fname

      UPDATER.EMAIL AS UPDATER_EMAIL,     -- $updater_email

      IF(UPDATER.FULL_NAME='',UPDATER.USER_NAME,UPDATER.FULL_NAME) AS UPDATER_CONDITIONAL, -- $updater_conditional

      -- about the owner

      OWNER.USER_NAME AS OWNER_UNAME, -- $owner_uname

      OWNER.FULL_NAME AS OWNER_FNAME, -- $owner_fname

      OWNER.EMAIL AS OWNER_EMAIL,     -- $owner_email

      IFNULL(OWNER.USER_NAME,'Unassigned') OWNER_USER, -- $owner_user

      -- about the submitter

      SUBMITTER.USER_NAME AS SUBMITTER_UNAME, -- $submitter_uname

      SUBMITTER.FULL_NAME AS SUBMITTER_FNAME, -- $submitter_fname

      SUBMITTER.EMAIL AS SUBMITTER_EMAIL,     -- $submitter_email

      -- about priority

      P.NAME AS PRIORITY, -- $priority

      -- about status

      S.NAME AS STATUS,   -- $status

      -- about impact

      I.NAME AS IMPACT,   -- $impact

      -- about category

      CAT.NAME AS CATEGORY, -- $category

      -- other fields
      
      HD_TICKET.CUSTOM_FIELD_VALUE0 AS TIME_ZONE, -- $time_zone

      HD_TICKET.CUSTOM_FIELD_VALUE1 AS COMPANY, -- $company

      HD_TICKET.CUSTOM_FIELD_VALUE2 AS COMPANY2, -- $company2

      HD_TICKET.CUSTOM_FIELD_VALUE3 AS MOBILE, -- $mobile
      
      DATE_FORMAT(HD_TICKET.CUSTOM_FIELD_VALUE7,'%b %d %Y') AS EMAIL_END, -- $email_end

      HD_TICKET.CUSTOM_FIELD_VALUE13 AS ERP, -- $erp   

      DATE_FORMAT(HD_TICKET.CUSTOM_FIELD_VALUE10,'%b %d %Y') AS TERM_DATE, -- $term_date

      HD_TICKET.CUSTOM_FIELD_VALUE11 AS TERM_TIME, -- $term_time

      HD_TICKET.CUSTOM_FIELD_VALUE12 AS COMPANY12, -- $company12

      HD_TICKET.CUSTOM_FIELD_VALUE14 AS COMPANY14, -- $company14

      -- employee fields
      EMPLOYEE.FULL_NAME as EMPLOYEE_FNAME, -- $employee_fname
      
      EMPLOYEE.EMAIL AS EMPLOYEE_EMAIL, -- $employee_email
      
      -- manager fields
      MANAGER.FULL_NAME as MANAGER_FNAME, -- $manager_fname
      
      MANAGER.EMAIL AS MANAGER_EMAIL, -- $manager_email
      
      -- forward_email fields
      FORWARD_EMAIL.FULL_NAME as FORWARD_EMAIL_FNAME, -- $forward_email_fname
      
      FORWARD_EMAIL.EMAIL AS FORWARD_EMAIL_EMAIL, -- $forward_email_email
      
      -- h_drive fields
      H_DRIVE.FULL_NAME as H_DRIVE_FNAME, -- $h_drive_fname
      
      H_DRIVE.EMAIL AS H_DRIVE_EMAIL -- $h_drive_email

      -- -- example of static distribution list

    FROM HD_TICKET

     /* latest change ***/ JOIN HD_TICKET_CHANGE C ON C.HD_TICKET_ID = HD_TICKET.ID

     /* complete history*/ JOIN HD_TICKET_CHANGE H ON H.HD_TICKET_ID = HD_TICKET.ID

     /* priority ********/ JOIN HD_PRIORITY P ON P.ID=HD_PRIORITY_ID

     /* status **********/ JOIN HD_STATUS S ON S.ID=HD_STATUS_ID

     /* impact-severity */ JOIN HD_IMPACT I ON I.ID=HD_IMPACT_ID

     /* category ********/ JOIN HD_CATEGORY CAT ON CAT.ID=HD_CATEGORY_ID

     /* owner ***********/ LEFT JOIN USER OWNER ON OWNER.ID = HD_TICKET.OWNER_ID

     /* submitter *******/ LEFT JOIN USER SUBMITTER ON SUBMITTER.ID = HD_TICKET.SUBMITTER_ID

     /* updater *********/ LEFT JOIN USER UPDATER ON UPDATER.ID = C.USER_ID

     /* employee ********/ LEFT JOIN USER EMPLOYEE ON EMPLOYEE.ID =  HD_TICKET.CUSTOM_FIELD_VALUE4
     
     /* forward_email ***/ LEFT JOIN USER FORWARD_EMAIL ON FORWARD_EMAIL.ID =  HD_TICKET.CUSTOM_FIELD_VALUE5
     
     /* h_drive *********/ LEFT JOIN USER H_DRIVE ON H_DRIVE.ID =  HD_TICKET.CUSTOM_FIELD_VALUE6
     
     /* manager *********/ LEFT JOIN USER MANAGER ON MANAGER.ID =  HD_TICKET.CUSTOM_FIELD_VALUE9

    WHERE

      C.DESCRIPTION LIKE '%"Open" to "Password Changed/Email Fwd"%'
     
      /* this is necessary when using group by functions */

    GROUP BY HD_TICKET.ID

    HAVING 1=1
Answer Summary:
Cancel
0 Comments   [ + ] Show Comments

Comments

Please log in to comment

Answer Chosen by the Author

0
For this join:
 /* latest change ***/ JOIN HD_TICKET_CHANGE C ON C.HD_TICKET_ID = HD_TICKET.ID
You should use the change ID of the current change:
 /* latest change ***/ JOIN HD_TICKET_CHANGE C ON C.HD_TICKET_ID = HD_TICKET.ID
and C.ID=<CHANGE_ID>

KACE will replace <CHANGE_ID> with the ID of the change at runtime.

Answered 02/04/2016 by: chucksteel
Red Belt

  • That fixed it. Thanks for your help!
Please log in to comment

Answers

Answer this question or Comment on this question for clarity