2013-07-17 140 views
1

我有一个MySQL数据库,我正在尝试创建一个Web界面来管理门票,现在我试图列出这样的门票: [标题] [姓名创建机票] [优先级] [创建日期] [人员负责这张机票]需要关于加入表的帮助

所以我有一个表名为机票与标题,创建票的人的身份证,优先级,日期。

我有另一台命名为用户在这里你可以找到的第一个和最后一个名称和一些其它信息与他们的ID(你可以用该ID的两个表链接)

我有另一个表名为tickets_users在那里你可以找到负责票的人的身份证号码

我的问题是我不知道如何在一个请求中链接所有这些,如果只有一个人负责票,那很简单,但是可以有多人,我尝试了一些疑问,但是当有更多的人负责票时,我总是把票价等增加一倍。

预先感谢 EDIT的表 示例:

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] 

在一个线(每票)和我的数据库中的所有门票

+0

请张贴表“tickets_users”结构,那么这应该是容易的, –

+1

它使你得到冠军多次当有更多的人分配到一票感。但是,您希望*或期望结果如何? – GolezTrol

+0

完成,编辑我的第一篇文章,谢谢 – Mokkun

回答

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; 

如果确实是有一票只有一个创作者(这是有道理的),那么我想给票creatoruseridJohn。在这种情况下,约翰不需要在联结表中,并且实际上不再需要type列。

+0

这不是很可读。我建议你采用我提供的结构并填写正确的名称。如果您需要帮助,请将表格结构放在您的问题中,并确保它正确对齐(使用代码格式化程序)。 – GolezTrol

+0

编辑我的第一篇文章,感谢和抱歉我不习惯于stackoverflow格式 – Mokkun

+0

我成功地做到了,但没有在一个请求,我的代码我真的很糟糕,没有优化,它看起来像,做了一个大的请求加入tickets_users的门票,并根据请求,我正在做一个WHERE usersid =“”的用户的另一个请求,并从第一个请求中放入变量,因此显示1000张门票将执行1000个请求... – Mokkun

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; 
+0

感谢您的回复,正是我所需要的 – Mokkun