条件何处条款(基于等级)

时间:2014-08-31 17:42:35

标签: php mysql

我想显示一个类似于此的状态鸟的分类列表:

订购Falconiformes
家庭隼科 游隼( Falco Perergrinus )|爱达荷州
订购Passeriformes
家庭鸫科 罗宾( Turdus migratorius )|康涅狄格州,密歇根州,威斯康辛州

我无法弄清楚如何制作符合我想要的单一查询,因此我试图找出解决方法。

这是我的基本查询:

$stm = $pdo->prepare("SELECT PLAN.Latin Latin2, PLAN.Common, PLAN.Group1, PLAN.Rank, PLAN.Family, PLAN.Order1, GS.Symbol, GS.Latin, GROUP_CONCAT(GG.Name ORDER BY GG.Name ASC 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
WHERE PLAN.Group1 = :RefCat AND Rank != '55'
GROUP BY PLAN.Common
ORDER BY PLAN.N, GG.Name");
$stm->execute(array(
'RefCat'=>$RefCat,
));

然后我可以用它来设置行的样式......

switch($Rank)
{
 case 35:
 $SymRow = '<tr class="Red Center"><td colspan="2" style="border-bottom: 1px solid #fff;"> <em>Order</em> <b>'.$Order.'</b> ('.$Common.')</td></tr>';
 break;
 case 45:
 $SymRow = '<tr class="Blue"><td colspan="2">&gt; <em>Family</em> <b>'.$Family.'</b>   ('.$Common.')</td></tr>';
 break;
 case 65:
 $SymRow = '
 <tr>
 <td class="Symbol">&gt;&gt; <a href="'.$GZ_URL.'/life/'.$LatinL.'" title="'.$Symbol.' ('.$Latin2.')">'.$row['Common'].'</a> (<em>'.$Latin2.'</em>)</td>
 <td class="Place"><a href="/world/'.$PlaceL.'" title="'.$Place.'">'.$PlaceGroup.'</a>  </td>
 </tr>
';
 break;
 default:
 $SymRow = '';
 break;
}

......等级35 =一个订单,45 =一个家庭,65 =一个物种。这样可行,但它会在表格gs_planimals中显示与鸟类相关的所有内容。我想只展示美国州鸟及其祖父母(家庭)和曾祖父母(订单)。

如果我修改WHERE子句以指示地理父级,就像这样......

WHERE PLAN.Group1 = 'bird' AND Rank != '55' **AND GG.IDParent = 'usa'**

然后它适用于物种(等级65)。但是,根本没有家庭或订单显示,大概是因为家庭和订单没有链接到表格gs或gw_geog。

所以我想知道是否有办法编写条件WHERE CLAUSE,就像这样...

WHERE PLAN.Group1 = 'bird' AND Rank != '55' [AND **- if Rank = 65 -** GG.IDParent = 'usa']

如果我可以这样做,那么表格仍应显示表格中的每个订单和系列,但我可以将一些PHP开关放在一起,手动删除我不想显示的订单和系列。

无论如何,现在有人如何修改那样的where子句?如果没有,你能建议另一种解决方法吗?

1 个答案:

答案 0 :(得分:1)

重新定位谓词

GG.IDParent = 'usa'

WHERE子句到ON的{​​{1}}子句

在WHERE子句中,该谓词否定了&#34;外部性&#34; LEFT JOIN。任何没有&#34;匹配&#34;的行来自LEFT JOIN的行,所有GG列都将为NULL,并且这些行不会满足GG.子句中的该谓词。

WHERE