mysqli 嵌套选择查询

标签 mysql database

我有两张 table ,需要加入它们。

表 1:门票

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

注意:表ticket中的topic_id存储最大的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 = 案例类型

排序 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

你能帮我吗?

最佳答案

我对您的数据库设计有一些疑问,因为如果您在 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

关于mysqli 嵌套选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48317710/

相关文章:

mysql - SQL JOIN 查询以收集两列的数据

mysql - 优化地理搜索查询

sql - 在子查询中使用声明的变量

mysql - 在查询 "LIMIT 1"中使用 "SELECT 1 ..."有意义吗?

mysql - 当有多个表连接时如何求和

php - 使用 php 和 mysql 数据库点击计数器

mysql - 显示像 mysql 中的列一样使用的部分搜索文本?

mysql - SQL查询-如果存在则更新,否则插入

mysql - 如何从数据库中获取前一行的值?

mysql - 在 MySQL 中以特定用户身份进行身份验证