2014-01-25 44 views
0

我想通了如何在一個特定的數據庫表顯示重複值的列表子查詢(PHP/MySQL的)的...命名了一系列

$stm = $pdo->prepare("SELECT URL, COUNT(*) tot 
FROM people 
GROUP BY URL 
HAVING tot > 1"); 
$stm->execute(array(
    'Total'=>$Total 
)); 

while ($row = $stm->fetch()) 
{ 
$URL_Dupe = $row['URL']; 
$tot = $row['tot']; 
$Dupe2[] = ''.$URL_Dupe.''.$tot.''; 
} 

我希望做同樣的事情用系列與UNION ALL子句鏈接在一起的表...

$stm = $pdo->prepare("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 AS URL FROM gw_geog GG WHERE GG.Name = :MyURL 
UNION ALL 
SELECT 'PX' AS GSiteID, Site, 'People' AS GSection, Ppl.URL FROM people Ppl WHERE Ppl.URL = :MyURL"); 
$stm->execute(array(
'MyURL'=>$MyURL 
)); 

換句話說,我想在兩個或兩個以上追查出現不止一次在單個表或一次(或更多)的任何單詞不同的表格。

但我想我必須首先爲所有這些表創建一個名稱(例如「Todo」),然後對該名稱執行操作,對吧?我怎麼做?我有一個類似的表,只是以「AS X」結尾。但是我不能在沒有出現錯誤的情況下在查詢上做到這一點。

回答

2

可以使union all查詢子查詢,然後彙總他們像:

select url, count(*) 
from ((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 AS URL 
     FROM gw_geog GG WHERE GG.Name = :MyURL 
    ) UNION ALL 
     (SELECT 'PX' AS GSiteID, Site, 'People' AS GSection, Ppl.URL 
     FROM people Ppl WHERE Ppl.URL = :MyURL 
    ) 
    ) t 
group by url; 

如果你真的要滿足的條件:「我想追查出現不止一次在一個表中的任何字或者一次(或多次)在兩個或更多不同的表中「。這相當於數至少爲2,所以添加having條款:

select url, count(*) 
from ((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 AS URL 
     FROM gw_geog GG WHERE GG.Name = :MyURL 
    ) UNION ALL 
     (SELECT 'PX' AS GSiteID, Site, 'People' AS GSection, Ppl.URL 
     FROM people Ppl WHERE Ppl.URL = :MyURL 
    ) 
    ) t 
group by url 
having count(*) > 1; 
+0

謝謝,但我一定是做錯了什麼我while循環,因爲我得到錯誤信息「未定義指數:URL。」 (注意:我通過URL更改了group by URL)。這是我的while循環: while($ row = $ stm-> fetch()) { $ URL = $ row ['URL']; } echo join($ URL,'
'); –

+0

這聽起來像一個PHP錯誤。我不確定爲什麼會發生這種情況。 –

+0

好的,我會將其標記爲正確的答案,然後修復我的PHP。 –