需要有关加入表格的帮助

时间:2013-07-17 21:48:37

标签: php mysql join

我有一个MySQL数据库,我正在尝试创建一个网络界面来管理门票,现在我正试图列出这样的门票: [标题] [创建票证的人的姓名] [优先级] [创建日期] [负责此票的人]

所以我有一张名为ticket的表,其中包含标题,创建票证的人的ID,优先级,日期。

我有另一个名为users的表,您可以在其中找到姓名和其他一些带有ID的信息(您可以使用该ID链接两个表)

我有另一个名为tickets_users的表,您可以在其中找到负责票证的人的ID

我的问题是我不知道如何在一个请求中链接所有这一切,如果只有一个人负责一张票可能很简单但是可以有多个人,我尝试了一些查询,但我总是得到当有一个人负责一张票时,门票标题等为双倍。

提前致谢 编辑 表格示例:

tickets:
   -id = 523 | title = help with internet explorer | priority = 3 | date = 2013-10-10 11:20:51
users: 
   -id = 25 | firstname = John | lastname = Light
   -id = 35 | firstname = Dwight | lastname = Night
   -id = 53 | firstname = Maria | lastname = Sun
tickets_users :
   -ticketid = 523 | userid = 25 | type = 1
   -ticketid = 523 | userid = 35 | type = 2
   -ticketid = 523 | userid = 53 | type = 2

我希望能够提出要求显示:

[help with internet explorer][John Light][3][2013-10-10 11:20:51][Maria Sun - Dwight Night]

在一行(每张票)和我的数据库中的所有票据

2 个答案:

答案 0 :(得分:1)

您可以使用group_concat聚合函数将链接人员的姓名分组到结果中的单个字段中。由于我没有确切的表格结构,我已经编写了字段和表格的名称。

select
  t.title,
  group_concat(
    case when tu.type = 1 then 
      concat(u.firstname, ' ', u.lastname)
    end) as creator,
  t.priority,
  t.date,
  group_concat(
    case when tu.type = 2 then 
      concat(u.firstname, ' ', u.lastname)
    end SEPARATOR ' - ') as users
from
  tickets t
  inner join tickets_users tu on tu.ticketid = t.id
  inner join users u on u.id = tu.userid
group by
  t.id;

如果确实只有一个故障单的创建者(这是有道理的),那么我会给creatoruserid一张票来引用John。在这种情况下,John不需要在联结表中,您实际上不再需要type列。

答案 1 :(得分:0)

我处理问题并获得预期结果。

select t.title,
    group_concat(
        case when tu.type = 1 then 
        concat(u.firstname, ' ', u.lastname)
        end) as creator,
    t.priority,
    t.date,
    group_concat(
        case when tu.type = 2 then 
        concat(u.firstname, ' ', u.lastname)
        end SEPARATOR ' - ') as users
from tickets t
inner join tickets_users tu on t.id=tu.ticketid
inner join users u on u.id=tu.userid  
where t.id=523;