mysqli嵌套选择查询

时间:2018-01-18 09:23:00

标签: mysql database mysqli

我有两张桌子,需要加入。

表1:ticket

ticket_id    topic_id
---------------------
0001      |   1
0002      |   3

注意:表topic_id中的ticket存储了最大的sort订单。下面我解释一下sort是什么样的。

表2:help_topic

topic_id   parent_id  sort   topic_name
---------------------------------------------
1        | 0         | 0    | request
2        | 1         | 1    | shipment
3        | 2         | 2    | problem

注意:排序0 =类别

排序1 = case_type

排序2 = sub_case_type

如果故障单没有case_type和sub_case_type,则将该字段留空

我需要像这样展示:

ticket_id  | category   | case_type   | sub_case_type
-----------------------------------------------------
0001       | request    |             |
0002       | request    | shipment    | problem

我已经尝试过此查询来获取主题:

SELECT ticket.ticket_id, 
       ticket.topic_id, 
       help_topic.topic_name 
FROM ticket 
INNER JOIN help_topic 
ON ticket.topic_id = help_topic.topic_id

我正在运行3个不同的查询只是为了获取主题类别,case_type和sub_case_type,它给了我问题,因为我假设第一个查询是获取sub_case_type但不是每个topic都有case_typesub_case_type

你能帮助我吗?

2 个答案:

答案 0 :(得分:0)

我对您的数据库设计有一些疑问,因为如果您在help_topic表上添加新行,则应更改SQL以获得结果。 或者SQL可能不足以为您提供正确的解决方案,您应该使用您的编程语言在演示级别而不是数据级别获得您想要的内容。

无论如何,这个SQL将提取你需要的数据,但不是你想象的那样。你会得到这样的东西:

ticket_id  | ht_1       | ht_2        | ht_3
-----------------------------------------------------
0001       | request    |             |
0002       | problem    | shipment    | request

如您所见,主题未对齐。 无论如何,这是SQL,如果这可以帮助你:

SELECT T.ticket_id, 
       ticket.topic_id, 
       HT1.topic_name AS ht_1,
       HT2.topic_name AS ht_2,
       HT3.topic_name AS ht_3
FROM ticket T
LEFT JOIN help_topic HT1 
ON T = HT1.topic_id
LEFT JOIN help_topic HT2
ON HT1.parent_id = HT2.sort
LEFT JOIN help_topic HT3
ON HT2.parent_id = HT3.sort

答案 1 :(得分:0)

试试这个。

select t.ticket_id ,if(sort = 0,"request","") as category from ticket as t 
join help_topic as h on t.ticket_id = h.topic_id;