我想创建一个特定客户提交给应用程序的所有故障单的列表,以及来自开发人员的其他信息,这些信息将用于解决故障单。在应用程序中,用户可以是客户或开发人员。

一个票证可以有多个用户(例如,一个客户和开发人员),一个用户可以拥有多个票证(一个客户可以提交多个票证,而开发人员可以接收多个票证)。这就是为什么我在票证和用户之间添加了多对多关系的原因。

我这样设计数据库:

tickets     tickets_users   users         groups
ticket_id   fk_ticket_id    user_id       group_id
            fk_user_id      fk_group_id   group_type


有没有一种方法可以在单个查询中与开发人员收集有关特定客户的票证信息。如果不是,您是否有更好的建议来更改我的数据库?

我想为客户安德鲁(Andrew)获取类似的清单:

ticket status     ticket priority  developer




Identify ticket    high             John
Identify ticket    low              Austin
etc                etc              etc


到目前为止,我已经进行了以下查询:

SELECT * FROM tickets t
  JOIN tickets_users tu ON tu.fk_ticket_id=t.ticket_id
  JOIN users u ON u.user_id=tu.fk_user_id
  JOIN groups g ON g.group_id=u.fk_group_id
  WHERE user_id = $customerId

最佳答案

您需要将用户和组两次加入到票证中,一次要让该人举起票证,一次要让开发人员来处理票证。但是,在这种情况下,开发人员无法举票。

SELECT t.ticket_status, t.ticket_priority, u2.user_name as developer FROM tickets t
  JOIN tickets_users tu ON tu.fk_ticket_id=t.ticket_id
  INNER JOIN users u1 ON u1.user_id=tu.fk_user_id AND u1.user_id = $customerId
  INNER JOIN groups g1 ON g1.group_id=u1.fk_group_id AND g1.group_type=1
  INNER JOIN users u2 ON u2.user_id=tu.fk_user_id
  INNER JOIN groups g2 ON g2.group_id=u2.fk_group_id AND g2.group_type=2


如果故障单没有分配开发人员,则该故障单不会显示在报告中。如果要将这些连接包括在结果集中,则需要将u2和g2连接更改为左连接。

但是,如果您知道票证只有一个筹集者和一个开发人员来工作,那么您应该在票证表中包括两个引用用户表的字段,而不需要连接表。

09-30 17:10
查看更多