【问题标题】:Multiple table - osticket多表 - osticket
【发布时间】:2015-08-06 09:50:15
【问题描述】:

我的查询为每张票提供多行。我想在一行中列出所有自定义值。我希望在查询数据库时将val.value 列为每个ticket_id 的列,而不是每个ticket_id 的多行

我希望输出将 val.value 显示为列。

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

输出如下:

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

【问题讨论】:

  • 我认为您至少需要向我们展示架构或示例数据。我有预感你想要什么,但因为你漏掉了关键信息,我帮不了你。

标签: mysql server webserver osticket


【解决方案1】:

这只是一个猜测(因为 OP 没有提供表架构):

如果在您JOIN 的其中一个表中,1 个工单行有几行,那么一个工单将有双行(例如 2 封电子邮件)。

查询也有错误的连接:

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

我想应该是:

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

编辑: 您可以尝试使用DISTINCT,但您必须检查结果中的数据是否正常。

【讨论】:

  • 感谢您的回复。我已经包含了提取的数据。我不想按行列出,而是希望按列列出数据。 ticket_id 是唯一的。 field_id 和 values 都来自 form_entry_values 表
【解决方案2】:

应该是这样的

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

【讨论】:

  • 你得到了多行,因为你选择的值表是 1:n 关系表 (ticket:value)
  • 通过使用它可以获得所需的结果,我认为 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 ttshd_ticket t,ttshd_department d,ttshd_ticket_status s,ttshd_user u,ttshd_form_entry e,ttshd_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 group by t.ticket_id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
相关资源
最近更新 更多