我应该将其更改为CONCAT吗?

时间:2014-08-17 16:00:43

标签: php mysql

表格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。

1 个答案:

答案 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())是没有意义的,因为您将得到一个任意值。