表格gs列出符号(例如旗帜,国花)。每行通过值IDArea(例如us-az)链接到一个地方(例如Arizona)。植物和动物包括值符号(=通用名称;例如木鸭)和拉丁语(=科学名称)。
表格gw_geog包含有关地点的其他信息,例如全名(例如亚利桑那州)。
我甚至不确定是否需要表格gs2_latin。它只是帮助标准化具有多个通用名称的符号的科学名称。
现在想象一下几个州采用的符号,如野牛(怀俄明州和堪萨斯州)。我想让我的桌子显示出来:
野牛|堪萨斯州,怀俄明州 驼鹿|缅因州阿拉斯加麋鹿犹他州
我想我的脚本有几个问题。首先,将位置值从一行追加到下一行。因此,如果第一行显示Maryland,第二行应显示Maine,则显示MarylandMaine。第三行显示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>
';
P.S。我也可能错误地显示$ PlaceGroup。
答案 0 :(得分:1)
您的输出有两列,因此我将简化查询:
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()
)是没有意义的,因为您将得到一个任意值。