2014-03-03 25 views
1

我的表结构(对不起我的英语不好):如何选择两个列具有相同的价值,而忽略列如果MySQL有父ID

enter image description here

我要让类别和类别下。例如,如果记录具有父级ID,则表示类别属于类别。我想要如果任何记录有父母身份证,显示正确。

我测试:

select tb1.id,tb1.catname,tb2.id,tb2.catname from adsystem.cat as tb1 inner join adsystem.cat as tb2 on tb1.id=tb2.parentid 

但输出是:

enter image description here

和测试:

select tb1.id,tb1.catname,tb2.id,tb2.catname from adsystem.cat as tb1 left join adsystem.cat as tb2 on tb1.id=tb2.parentid 

这几乎是:看

enter image description here 我不想显示猫下红线:

enter image description here

如果输出这是正确的,我可以做出正确的用PHP

我想这样的准确输出(而这仅仅是Photoshop中):

enter image description here

+0

为什么要这样做的显示顺序回事?如果您最终在儿童记录中获得不止一个层次,会发生什么情况?例如一棵3+深的树? –

+0

我只想制作2个关卡类别。我想如果我使分类分类表和类别下,我可以得到答案简单 –

回答

1

这就是知道为Adjacency List,它看起来就像你正在试图获得从Y全树视图我们的清单。

这应该是你在找什么

SELECT t1.catname AS lev1, t2.catname as lev2, t3.catname as lev3 FROM adsystem.cat AS t1 
LEFT JOIN adsystem.catAS t2 ON t2.parentid = t1.id 
LEFT JOIN adsystem.catAS t3 ON t3.parentid = t2.id 

如果希望不拘泥于那么我会建议研究的Nested Set更灵活的结构Adjacency List将正常进行简单固定的数据,但是模型。

编辑:

你最想要的图像中的精确的输出,这是不可能与你的表的模式(这不是真的可能),不存在相关性,以支持(联/加盟)和排序。你'可以'以一种讨厌,笨拙的方式来做,这将是一个缓慢而且非常糟糕的主意,你需要在运行时在一个新列中创建自己的相关引用,然后通过它进行排序 - 通过字符串concat或存储过程。

为什么不能使用正常的邻接列表结构,并以干净的方式获取数据,然后通过应用程序逻辑对其进行处理?

+0

感谢您的答案,我测试您的查询和输出喜欢我的查询(图片与红线下) –

+0

对不起,但你的英语是非常糟糕的而且很难理解你要求的内容。我的查询可以让你一次得到所有的孩子。为什么在数据库查看器中需要这种确切的输出? – Steve

+0

我想要这个输出为用户和广告系统,我的脚本只需要两个级别的猫,是的,我的英语是坏的:(你只看到我的最后一张照片后,你可以undrestand我的问题当然,我测试你的查询,这个查询显示我的查询完全是我的查询(图片用红线)但我不想在第一列的猫下显示 –

1

我想需要此查询:

select tb1.id, 
    case when tb2.catname is null 
     then tb1.catname 
     else tb2.catname 
    end catname, 
    tb1.parentid 
from adsystem.cat as tb1 
left join adsystem.cat as tb2 on tb1.parentid = tb2.id 

也许我明白...

select tb1.id cat_id, tb1.catname cat, 
tb2.id subcat_id, tb2.catname subcat from 
(select distinct id, catname 
from adsystem.cat 
where parentid is null or parentid = '') tb1 
left join adsystem.cat as tb2 on tb2.parentid = tb1.id 
; 
+0

测试你查询但输出这个(不正确):http: //8pic.ir/images/92569074422097341725.jpg –

+0

您从photoshop得到的结果看起来像下面的查询结果:select ad,catname,parentid from adsystem.cat tb1。是不是? – AppLend

+0

感谢您的帮助,我有categorie和在类别下,我测试你的查询,但不正确的顺序和名称。请参阅第一猫和第二猫之下的记录和第五猫之下 –

相关问题