表gs列出了符号(例如旗帜,国花)。每行都通过值IDArea(例如us-az)链接到某个地点(例如Arizona)。动植物包括值Symbol(=通用名称;例如林鸭)和Latin(=学名)。
表gw_geog具有有关地点的其他信息,例如全名(例如Arizona)。
我什至不确定我是否需要表gs2_latin。它只是帮助标准化具有多个通用名称的符号的科学名称。
现在想象一下被几个州采用的符号,例如野牛(怀俄明州和堪萨斯州)。我希望我的桌子显示以下内容:
野牛|怀俄明州堪萨斯州
驼鹿缅因州阿拉斯加
麋鹿犹他州
我认为我的脚本有几个问题。首先,将位置值从一行添加到下一行。因此,如果第一行显示马里兰州,第二行显示缅因州,则显示马里兰州。第三行显示MarylandMaineDelaware,最后一行显示所有五十个州的名称。
我也无法找出正确的值进行分组。我早些时候发布了有关此查询的另一个问题,有人建议使用MySQL的CONCAT函数。但是,我还没有弄清楚该如何插入。此外,我不小心关闭了浏览器上的选项卡,现在甚至找不到该讨论。 (但是,该讨论解决了我的第一个问题。)
无论如何,这是我的脚本:
$stm = $pdo->prepare("SELECT GG.N, GG.IDArea, GG.URL GURL, GG.Name GName,
GS.N, GS.IDArea SymArea, GS.URL, GS.IDSymbol, GS.Symbol, GS.Latin,
GS.Desig, GS.DesigGen, GS.DesigGroup, G4.Common, G4.Latin
FROM gw_geog AS GG
LEFT JOIN gs AS GS ON GS.IDArea = GG.IDArea
LEFT JOIN gs2_latin AS G4 ON G4.Common = GS.Symbol
WHERE GG.IDParent = 'usa' AND GS.DesigGen = :RefCat
GROUP BY GS.Symbol ORDER BY GS.Symbol");
$stm->execute(array(
'RefCat'=>$RefCat,
));
下面的代码在我的while循环中...
$PlaceGroup[] = $row['GName'];
// 更远...
echo '
<tr>
<td class="Symbol"><a href="$GZ_URL/life/'.$LatinL.'" title="'.$Symbol.' ('.$Latin.')">'.$row['Symbol'].'</a> (<em>'.$Latin.'</em>)</td>
<td class="Place"><a href="/world/'.$PlaceL.'" title="'.$Place.'">'.join( $PlaceGroup, ',' ).'</a></td>
</tr>
';
附言我也可能显示$ PlaceGroup错误。
最佳答案
您的输出有两列,因此我将简化查询:
SELECT GS.Symbol, GROUP_CONCAT(GG.Name) as Names
FROM gw_geog GG LEFT JOIN
gs GS
ON GS.IDArea = GG.IDArea LEFT JOIN
gs2_latin G4
ON G4.Common = GS.Symbol
WHERE GG.IDParent = 'usa' AND GS.DesigGen = :RefCat
GROUP BY GS.Symbol
ORDER BY GS.Symbol;
您可以添加其他列。但是,没有必要添加关于位置的列(没有
group_concat()
),因为您将获得任意值。关于php - 我应该将其更改为CONCAT吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25350955/