Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP/MYSQL:左连接未获得正确的父级详细信息_Php_Mysql_Join_Left Join - Fatal编程技术网

PHP/MYSQL:左连接未获得正确的父级详细信息

PHP/MYSQL:左连接未获得正确的父级详细信息,php,mysql,join,left-join,Php,Mysql,Join,Left Join,通过以上查询,我得到以下详细信息: 但是上面是错误的 因为pname是我的子包 梅恩是我的主要客户 实际上我需要(应该是)pname(NULL,0004)和main(00030002),如下所示(下图是编辑图): 因为00030002是主数据包,0004是0002的子数据包。。。0003没有任何子包 谁能帮我找出我错的地方 谢谢 更新:父表映像(作为smirt发出\接收\处理) 根据用户:KISHORE以下查询: SELECT smirt.id as mid, pc.packet_name

通过以上查询,我得到以下详细信息:

但是上面是错误的

因为pname是我的子包 梅恩是我的主要客户

实际上我需要(应该是)pname(NULL,0004)和main(00030002),如下所示(下图是编辑图):

因为00030002是主数据包,0004是0002的子数据包。。。0003没有任何子包

谁能帮我找出我错的地方

谢谢

更新:父表映像(作为smirt发出\接收\处理)

根据用户:KISHORE以下查询:

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
结果如下:

第二次更新表:根据下面的查询创建下面的数据包详细信息

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

我对你想要什么感到非常困惑

当使用测试数据运行时,您拥有的SQL将提供您描述为错误的数据。它得到一个记录和一个数据包,然后是一个父数据包。如果数据包没有父级,则返回NULL(并且应该返回)

我认为您需要的唯一一件事是,如果没有父记录,那么您希望将子数据包id作为父数据包id返回,子数据包id返回为NULL

如果是这样的话:-

SELECT *
FROM `packet_creation`
WHERE `id`
IN ( 5, 11, 9 )
LIMIT 0 , 30
根据以上查询结果如下:

因此,我得到的最终输出是3,4,2,但应该是000300002004

编辑-将字段强制转换为char以尝试并强制前导零:-

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

您是否也可以发布数据包创建表的匹配数据。至少足够重现问题了。先生,数据包创建表中有很多数据。好的,让我看看。谢谢回复。我会试着把它放在这里,看看测试数据,对于中间为4的记录,数据包id是5。数据包_id 5的数据包名称为“0003”(因此pname为“0003”),父数据包id为0。但是,没有id为0的数据包创建记录,因此没有匹配的父数据包,因此mainn为null。基于此,您得到的结果与您拥有的数据是正确的。先生,从顶部。。。第一个图像是错误的。。第二张图片是我想要的(我已经通过编辑展示了)。。。。父\u数据包\u id为0的0003和0002。。其中as 0004的父数据包id为9。。。因此,0002是主数据包,0004是子数据包。。这是0002的…所以最终输出应该是pname:(NULL,0004),其中包含子包详细信息。其中main:(00030002)是mainpacket。但我得到的是前1个图像,这是worngInshort,我需要如下:mainpacket:子包--(00030002):(NULL,0004)。。。因此,00030002是主数据包,其中as 0004是0002的子数据包。。。0003(主数据包)没有任何子数据包,因此其为NULL。。。。。但我得到的是(NULL,0002):(00030004),这是错误的。。。因为0003是我的主数据包,应该是(00030002):(空,0004),…希望你能理解,也许你是对的,解释我有点困惑:。。先生,我得到的是pname:main=(00030004):(NULL,0002)。。其中pname是子包(这是子类别),mainn是主包(这是主类别)。。。但实际上0003是主数据包,应该显示在main列中,但它显示在pname(subpacket)列表中。因此,由于0003是主数据包。。。我应该得到pname(子数据包)的结果:main(主数据包)=(null,0004):(00030002)…我没有得到:(先生,我在你的答案中放入了查询图像..我也从你的查询上面得到了我想要的..但我得到的结果是3,4,2,但应该是000300040002..我的零不在哪里:(现在..请帮助我..也请在easy manager中向我解释什么是错误的,我丢失了..以便我可以在所有其他页面中更改相同的内容:)感谢到目前为止的支持..仅00020003然后标记为已解决:)先生,你在那里…现在只缺少000个…如何使用上面的查询返回不确定那里发生了什么,因为我尝试获取前导零。你可以尝试在查询中将字段强制转换为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