修改查询以识别孩子

时间:2014-09-05 01:28:13

标签: php mysql

表gs列出了各种符号,其中大多数是物种,例如野牛(gs.Latin =' Bison-bison')。每行还链接到表格gw_geog,其中包含有关地理位置的更多详细信息,例如采用野牛作为符号的每个州的名称。

表gs_planimals是使用父子关系的分类排名。字段gs_planimals.Latin包含值' Bison-bison,"但它也包括其父母,祖父母(' Bovidae')和曾祖父母(' Artiodactyla')。但是,gs_planimals中的行不包含地理指标。

在以下查询中,GG.IDParent =' afr'选择其父母为'afr' (非洲)。因此它显示了非洲国家采用的符号列表。

SELECT PLAN.Latin Latin2, PLAN.Common, PLAN.Rank, PLAN.Planimal, PLAN.Family, PLAN.Order1, PLAN.NoSymbol, PLAN.National, GS.Symbol, GS.Latin, GG.URL AS GURL, GROUP_CONCAT(CONCAT('<a href=\"', GG.URL, '\" title=\"',  GG.Name, '\">', GG.Name, '</a>')) AS Names, GG.IDParent
FROM gs_planimals PLAN
LEFT JOIN gs GS ON GS.Latin = PLAN.Latin
LEFT JOIN gw_geog GG ON GG.IDArea = GS.IDArea AND GG.IDParent = 'afr'
WHERE Rank != 55 AND PLAN.National = 'nat' AND NoSymbol != '1'
GROUP BY PLAN.Latin
ORDER BY PLAN.N, GG.Name

问题是它只适用于物种水平(表gs中存储的符号或物种)。较高的分类群(例如家庭和订单)来自表格gs_planimals。由于该表没有地理线索,它显示所有家庭和订单,他们是否是特定符号物种的祖父母。

换句话说,我不想显示这个:

Carnivora
Canidae
Felidae
Artiodactyla
Bovidae
Cervidae
Bison-bison

我想改为显示:

Artiodactyla
Bovidae
Bison-bison

所以我的问题是:有没有办法修改我的查询(或添加脚本),以便不显示表gs中没有子项的系列(gs_planimals.Latin),并且在此特定查询中没有作为子项的系列的订单(gs_planimals.Latin)同样没有显示?

编辑:数据

最重要的是八个字段。表格gs和gw_geog每个都有一个名为IDArea的字段,它们在这个字段上加入。表格gs和gs_planimals在名为Latin的字段上连接。字段gs.Symbol有点多余;它与字段gs_planimals.Common基本相同。

大多数象征性植物和动物都是物种,在表gs_planimals中由Rank = 65表示。但是,gs_planimals还包括更高的分类,例如家庭和订单。

大多数其他领域是用于选择特定植物或动物群(例如哺乳动物)或特定区域(例如北美洲)的限定词。

如果我们显示北美哺乳动物符号列表,它将包括野牛(美国和国家动物以及几个州的象征)和大角羊,但不包括非洲狮。它还包括野牛/大角羊的祖父母(家庭)和曾祖父母(订单)。所以它看起来像这样:

命令偶蹄目 家庭牛科 野牛(野牛野牛)|美国,堪萨斯州,怀俄明州 大角羊(Ovis canadensis)|科罗拉多州艾伯塔省

显示代表南美国家的所有ecosymbols(植物和动物)的查询如下所示:

SELECT PLAN.Latin Latin2, PLAN.Common, PLAN.Rank, PLAN.Planimal, PLAN.NoSymbol, PLAN.National, GS.Symbol, GS.Latin, GG.URL AS GURL, GROUP_CONCAT(CONCAT('<a href=\"', GG.URL, '\" title=\"', GG.Name, '\">', GG.Name, '</a>') ORDER BY GG.Name SEPARATOR ', ') AS Names,  GG.IDParent
FROM gs_planimals PLAN
LEFT JOIN gs GS ON GS.Latin = PLAN.Latin
LEFT JOIN gw_geog GG ON GG.IDArea = GS.IDArea AND GG.IDParent = 'sa'
WHERE Rank != 55 AND PLAN.National = 'nat' AND NoSymbol != '1'
GROUP BY PLAN.Latin
ORDER BY PLAN.N, GG.Name

IDParent =&#39; sa&#39;表示没有从表gw_geog中选择任何内容,除非其父级是&#39; sa&#39; (南美洲)。 NoSymbol只是在我的数据库表中清除了一些错误。

0 个答案:

没有答案