MySQL вложенный запрос на выборку

0

У меня есть две таблицы и вам нужно присоединиться к ним.

Таблица 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

Примечания: sort 0 = category

sort 1 = case_type

sort 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_type и sub_case_type

Вы можете мне помочь?

Теги:
database
mysqli

2 ответа

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
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;
  • 1
    Спасибо за этот фрагмент кода, который может предоставить некоторую ограниченную краткосрочную помощь. Правильное объяснение значительно улучшило бы его долгосрочную ценность, показав, почему это хорошее решение проблемы, и сделало бы его более полезным для будущих читателей с другими, похожими вопросами. Пожалуйста, измените свой ответ, чтобы добавить некоторые объяснения, в том числе предположения, которые вы сделали.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню