2014-01-24 58 views
0

我有一系列與各種網站和部分相對應的數據庫表格 - 例如, MySite/World,MySite2/World,MySite3/People等。向UNION ALL查詢添加額外的字段

我將所有這些項目合併到一個新的網站。但爲了使項目正常工作,我需要在我的查詢中保留每個數據庫表的標識 - 每個數據庫表的原始網站和部分的名稱。在另一個線程中,stackoverflow上的某個人向我展示瞭如何從數據庫表中導出靜態值(例如,選擇'GZ'作爲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()) 
{ 

它工作正常,但有一個問題。表org實際上與多個網站相關聯。例如,在一個政治網站上可能有一篇關於亞伯拉罕林肯(URL = Abraham_Lincoln)的文章,以及關於地理網站中一些着名探險家的文章。或者可能有兩篇關於政治活躍的科學家的文章,一篇在政治網站,另一篇在科學網站。

因此,表人和機構單位有一個名爲網站一個額外的字段。兩者的大部分值都是PX,儘管SM是另一個常見值,還有其他值。

我上面發佈的查詢標識表中的人物和組織的一切爲PX。我想知道是否有某種方式,我可以添加這些額外的站點字段添加到查詢,修改它,以便從表中的人或組織被正確地識別爲PX,SM等

回答

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"); 
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

我想你想使用SELECT Site AS GSiteID ....而不是SELECT 'PX' AS GSiteID ...

Select 'Something' as Name只是選擇一個硬編碼的文本字符串,並給它起了個名字,如果它的一列。因此,如果您想要實際列,請使用列名稱(SELECT Site)而不是文字。如果你想列在返回的數據集,Select realcolumnname as newcolumnname重命名......