Php 我应该把这个换成CONCAT吗?

Php 我应该把这个换成CONCAT吗?,php,mysql,Php,Mysql,表gs列出了符号(例如国旗、国花)。每一行通过IDArea值(例如us az)链接到一个地方(例如亚利桑那州)。植物和动物包括价值符号(=通用名称;如木鸭子)和拉丁语(=学名) 表gw_geog提供了有关地点的其他信息,如全名(如亚利桑那州) 我甚至不确定我是否需要表gs2_拉丁语。它只是帮助标准化具有多个通用名称的符号的科学名称 现在想象一个被几个州采用的符号,例如野牛(怀俄明州和堪萨斯州)。我希望我的表格显示以下内容: 野牛|堪萨斯州,怀俄明州 驼鹿|缅因州阿拉斯加州 犹他州麋鹿 我想我的剧

表gs列出了符号(例如国旗、国花)。每一行通过IDArea值(例如us az)链接到一个地方(例如亚利桑那州)。植物和动物包括价值符号(=通用名称;如木鸭子)和拉丁语(=学名)

表gw_geog提供了有关地点的其他信息,如全名(如亚利桑那州)

我甚至不确定我是否需要表gs2_拉丁语。它只是帮助标准化具有多个通用名称的符号的科学名称

现在想象一个被几个州采用的符号,例如野牛(怀俄明州和堪萨斯州)。我希望我的表格显示以下内容:

野牛|堪萨斯州,怀俄明州

驼鹿|缅因州阿拉斯加州

犹他州麋鹿

我想我的剧本有几个问题。首先,将位置值从一行追加到下一行。因此,如果第一行显示马里兰,第二行显示缅因州,则显示马里兰缅因州。第三行显示马里兰州和缅因州,最后一行显示所有五十个州的名称

我也无法计算出分组依据的正确值。我之前发布了关于这个查询的另一个问题,有人建议使用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>
';
echo'
(“.$Latin.”)
';

另外,我可能没有正确显示$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;

您可以添加其他列。但是,在列中添加关于该位置的内容(没有
组_concat()
)是没有意义的,因为您将得到一个任意值。

我将此标记为正确答案,因为我询问了concat,a,您向我演示了如何操作。;)但是,“我的显示器”仍然显示楼梯踏步效果,每一行都会附加上一行的地名。我将继续玩代码,看看是否能解决它。@DavidBlomstrom。使用此查询时,每个符号应该只有一行。是的,每个符号只有一行。但第一列正确显示了符号的名称,而第二列列出了与该符号相关联的位置以及前几行中显示的所有位置。@DavidBlomstrom。我怀疑是代码读取了这些值。MySQL不容易将值从一行累积到下一行,而这段代码并没有做到这一点。