SELECT smirt.id as mid,
pc.packet_name as pname,
pcs.packet_name as mainn,
smirt.p_status as st ,
smirt.new_value as weight ,
smirt.packet_id,
smirt.parent_packet_id
FROM issue_receive_process AS smirt
LEFT JOIN packet_creation AS pc ON pc.id = smirt.packet_id
LEFT JOIN packet_creation AS pcs ON pcs.id = pc.parent_packet_id
WHERE smirt.type = 53
AND smirt.main_kapan_id IN(1,2)
ORDER BY smirt.packet_id
Из вышеприведенного запроса я получаю ниже детали:
Но выше неправильно
Как pname мой подпакет
и mainn это мой главный пакет
На самом деле мне нужно (должно быть) pname (NULL, 0004) И mainn (0003,0002), как показано ниже (ниже изображение является редактировать изображение):
так как 0003, 0002 — основной пакет, а 0004 — подпакет 0002 … 0003 не имеет никакого подпакета ….
Может ли помочь мне, где я не прав.
Спасибо
ОБНОВИТЬ : PARENT TABLE IMAGE thats (issue_receive_process AS smirt)
КАК ПОЛЬЗОВАТЕЛЬ: KISHORE НИЖЕ QUERY:
SELECT smirt.id
,smirt.packet_id
,smirt.main_kapan_id
,pc.id
,pc.packet_name
,pc.parent_packet_id
FROM issue_receive_process AS smirt
LEFT JOIN packet_creation AS pc ON pc.id = smirt.packet_id
WHERE pc.packet_name IN ('0002','0003','0004')
ORDER BY smirt.packet_id
НИЖЕ РЕЗУЛЬТАТ:
Второе обновление таблицы: Пакет_создание ниже деталей, как показано ниже запроса
SELECT *
FROM `packet_creation`
WHERE `id`
IN ( 5, 11, 9 )
LIMIT 0 , 30
Я очень смущен тем, что вы хотите.
Ваш SQL даст данные, которые вы описываете как неправильные при запуске с вашими тестовыми данными. Он получает запись и пакет с этим, а затем этот родительский пакет. Если у пакета нет родителя, то возвращается (и должен быть) NULL.
Единственное, что я могу подумать, что вы хотите, это то, что если родительской записи нет, вы хотите, чтобы идентификатор дочернего пакета возвращался как идентификатор родительского пакета, а дочерний — как NULL.
Если так, то вот так:
SELECT smirt.id as mid,
IF(pcs.packet_name IS NULL, NULL, pc.packet_name) as pname,
IF(pcs.packet_name IS NULL, pc.packet_name, pcs.packet_name) as mainn,
smirt.p_status as st ,
smirt.new_value as weight ,
smirt.packet_id,
smirt.parent_packet_id
FROM issue_receive_process AS smirt
LEFT JOIN packet_creation AS pc ON pc.id = smirt.packet_id
LEFT JOIN packet_creation AS pcs ON pcs.id = pc.parent_packet_id
WHERE smirt.type = 53
AND smirt.main_kapan_id IN(1,2)
ORDER BY smirt.packet_id
КАК ВЫШЕ ВЫШЕ КРАТКИЙ РЕЗУЛЬТАТ НИЖЕ:
ПОЧЕМУ ЗАКЛЮЧИТЕЛЬНЫЙ РЕЗУЛЬТАТ Я ПОЛУЧИЛ, НО ЕГО ПРИХОДИТ КАК 3,4,2, но должно быть 0003,0002,0004
РЕДАКТИРОВАТЬ — приведение полей к типу char, чтобы попытаться заставить ведущие нули: —
SELECT smirt.id as mid,
IF(pcs.packet_name IS NULL, NULL, CAST(pc.packet_name AS CHAR)) as pname,
IF(pcs.packet_name IS NULL, CAST(pc.packet_name AS CHAR), CAST(pcs.packet_name AS CHAR)) as mainn,
smirt.p_status as st ,
smirt.new_value as weight ,
smirt.packet_id,
smirt.parent_packet_id
FROM issue_receive_process AS smirt
LEFT JOIN packet_creation AS pc ON pc.id = smirt.packet_id
LEFT JOIN packet_creation AS pcs ON pcs.id = pc.parent_packet_id
WHERE smirt.type = 53
AND smirt.main_kapan_id IN(1,2)
ORDER BY smirt.packet_id
Других решений пока нет …