我有一系列与各种网站和部分相对应的数据库表 - 例如MySite / World,MySite2 / World,MySite3 / People等
我正在将所有这些项目合并到一个新网站中。但是为了使项目工作,我需要在我的查询中保留每个数据库表的标识 - 每个数据库表的原始网站和部分的名称。在另一个线程中,stackoverflow上的某个人向我展示了如何从数据库表中派生静态值(例如,选择'GZ'AS GSiteID)。所以我结束了以下查询(虽然它实际上查询的表格多于我在下面列出的表格):
$stm = $pdo->prepare("SELECT 'GZ' AS GSiteID, 'Life' AS GSection, GZL.Taxon AS URL
FROM gz_life GZL WHERE GZL.Taxon = :MyURL
UNION ALL
SELECT 'All' AS GSiteID, 'World' AS GSection, GG.Name FROM gw_geog GG WHERE GG.Name = :MyURL
UNION ALL
SELECT 'GS' AS GSiteID, 'World' AS GSection, GS.URL FROM gs GS WHERE GS.URL = :MyURL
UNION ALL
SELECT 'PX' AS GSiteID, 'People' AS GSection, Ppl.URL FROM people Ppl WHERE Ppl.URL = :MyURL
UNION ALL
SELECT 'PX' AS GSiteID, 'Orgs' AS GSection, PXO.URL FROM orgs PXO WHERE PXO.URL = :MyURL");
$stm->execute(array(
'MyURL'=>$MyURL
));
while ($row = $stm->fetch())
{
它工作正常,但有一个问题。表人和 orgs 实际上与多个网站相关联。例如,在一个政治网站上可能会有一篇关于亚伯拉罕林肯(URL = Abraham_Lincoln)的文章和一篇关于地理网站上一些着名探险家的文章。或者可能有两篇关于政治活跃科学家的文章,一篇在政治网站上,另一篇在科学网站上。
因此,表人和组织有一个名为站点的额外字段。两者的大多数值都是 PX ,但 SM 是另一个常见值,还有其他值。
我上面发布的查询将人员和组织中的所有内容标识为 PX 。我想知道是否有一些方法可以将这些额外的站点字段添加到查询中,对其进行修改,以便将表人或组织中的特定行正确识别为PX,SM等。
答案 0 :(得分:1)
SELECT 'GZ' AS GSiteID, 'Life' AS GSection, GZL.Taxon AS URL
FROM gz_life GZL WHERE GZL.Taxon = :MyURL
UNION ALL
SELECT 'All' AS GSiteID, 'World' AS GSection, GG.Name FROM gw_geog GG WHERE GG.Name = :MyURL
UNION ALL
SELECT 'GS' AS GSiteID, 'World' AS GSection, GS.URL FROM gs GS WHERE GS.URL = :MyURL
UNION ALL
SELECT Site AS GSiteID, 'People' AS GSection, Ppl.URL FROM people Ppl WHERE Ppl.URL = :MyURL
UNION ALL
SELECT Site AS GSiteID, 'Orgs' AS GSection, PXO.URL FROM orgs PXO WHERE PXO.URL = :MyURL
这样,其他三个表(gz_life,gw_geog和gs)将具有默认值,并且将为人员和组织包含表/行特定值。
答案 1 :(得分:1)
我认为你想使用SELECT Site AS GSiteID
....而不是SELECT 'PX' AS GSiteID
...
Select 'Something' as Name
只是选择一个硬编码的文字字符串,并为其命名,就像它的列一样。因此,如果您想要实际列,请使用列名(SELECT Site
)而不是文字。如果要重命名返回的数据集中的列,Select realcolumnname as newcolumnname
...
答案 2 :(得分:1)
您可以将site
添加到每个子查询,并为其分配值NULL
,但不使用该子查询:
SELECT 'GZ' AS GSiteID, NULL as Site, 'Life' AS GSection, GZL.Taxon AS URL
FROM gz_life GZL WHERE GZL.Taxon = :MyURL
UNION ALL
SELECT 'All' AS GSiteID, NULL as Site, 'World' AS GSection, GG.Name FROM gw_geog GG WHERE GG.Name = :MyURL
UNION ALL
SELECT 'GS' AS GSiteID, NULL as site, 'World' AS GSection, GS.URL FROM gs GS WHERE GS.URL = :MyURL
UNION ALL
SELECT 'PX' AS GSiteID, Site, 'People' AS GSection, Ppl.URL FROM people Ppl WHERE Ppl.URL = :MyURL
UNION ALL
SELECT 'PX' AS GSiteID, Site, 'Orgs' AS GSection, PXO.URL FROM orgs PXO WHERE PXO.URL = :MyURL");