2013-07-17 186 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