Multiple table - osticket

855 Views Asked by At

My query gives multiple row per ticket. I want to list all custom values in one row. I want the val.value listed as columns against each ticket_id when I query my database, instead of multiple row for each ticket_id

I want the output to show the val.value as columns instead.

SELECT 
ticket.ticket_id,ticket.`number`,ticket.dept_id,val.field_id,val.value,
ticket.staff_id,ticket.team_id,user.name,   dept.dept_name,status.state,status.name as 
status,ticket.source,ticket.isoverdue,ticket.isanswered,ticket.created 
FROM ost_TICKET ticket 
LEFT JOIN ost_ticket_status status ON status.id = ticket.status_id 
LEFT JOIN ost_user user ON user.id = ticket.user_id 
LEFT JOIN ost_department dept ON ticket.dept_id=dept.dept_id 
LEFT JOIN ost_form_entry entry ON ticket.ticket_id = entry.object_id 
LEFT JOIN ost_form_entry_values val ON entry.id = val.entry_id

Output is as follows:

ticket_id,number,dept_id,field_id,value,staff_id,team_id,name,dept_name,state,status,source,isoverdue,isanswered,created

4, 587202,4,3,NULL,15,0,Mark D,SalesDep,open,Open,Phone,0,0,10/14/2014 9:09 4, 587202,4,4,NULL,15,0,Mark D,SalesDep,open,Open,Phone,0,0,10/14/2014 9:09 4, 587202,4,87,NULL,15,0,Mark D,SalesDep,open,Open,Phone,0,0,10/14/2014 9:09 4, 587202,4,117,NULL,15,0,Mark D,SalesDep,open,Open,Phone,0,0,10/14/2014 9:09 4, 587202,4,20,Fish Farm,15,0,Mark D,SalesDep,open,Open,Phone,0,0,10/14/2014 9:09 4, 587202,4,22,Normal,15,0,Mark D,SalesDep,open,Open,Phone,0,0,10/14/2014 9:09 4, 587202,4,73,nya-08-211,15,0,Mark D,SalesDep,open,Open,Phone,0,0,10/14/2014 9:09 4, 587202,4,74,88,15,0,Mark D,SalesDep,open,Open,Phone,0,0,10/14/2014 9:09 4, 587202,4,84,Bara,15,0,Mark D,SalesDep,open,Open,Phone,0,0,10/14/2014 9:09 4, 587202,4,85,Shaba,15,0,Mark D,SalesDep,open,Open,Phone,0,0,10/14/2014 9:09 4, 587202,4,86,Kolkata,15,0,Mark D,SalesDep,open,Open,Phone,0,0,10/14/2014 9:09 4, 587202,4,165,Tango,15,0,Mark D,SalesDep,open,Open,Phone,0,0,10/14/2014 9:09

2

There are 2 best solutions below

1
On

It is just a guess (since OP not provided tables schema):

If inside one of the tables that you JOIN there are several rows for 1 ticket row you will have double rows for a ticket (for example 2 emails).

Also the query has wrong join:

LEFT JOIN ost_email email ON user.id = email.email_id

I suppose it should be:

LEFT JOIN ost_email email ON user.id = email.user_id

EDIT: You can try to use DISTINCT but you must check if data in the result is ok.

2
On

It should be like this

SELECT t.ticket_id,t.number,t.dept_id,v.field_id,v.value,t.staff_id,t.team_id,u.name,d.name,s.state,s.name status,t.source,t.isoverdue,t.isanswered,t.created FROM ost_ticket t,ost_department d,ost_ticket_status s,ost_user u,ost_form_entry e,ost_form_entry_values v where s.id = t.status_id and u.id = t.user_id and t.dept_id=d.id and t.ticket_id = e.object_id and e.id = v.entry_id