我应该将其更改为CONCAT吗

我应该将其更改为CONCAT吗

表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/

10-09 13:19