2015-10-07 88 views
3

這是我使用的顯示頁面的統計查詢:添加限制1至數查詢

$sql = " 
SELECT SUM(num) as num FROM (
    SELECT 
    COUNT(URL) AS num 
    , 'World' AS GoSection 
    , 'GW' AS MySite 
    FROM gw_geog 
    WHERE URL = :MyURL AND G1 = 1 
UNION ALL 
    SELECT 
    COUNT(URL) AS num 
    , 'World' AS GoSection 
    , 'GW' AS MySite 
    FROM gw_geog_political 
    WHERE URL = :MyURL 
) AS X"; 

$stmt = $pdo->prepare($sql); 
$stmt->bindParam(':MyURL',$MyURL,PDO::PARAM_STR); 
$stmt->execute(); 
$Total = $stmt->fetch(); 

我希望有兩個變化:

1)刪除WHERE URL =:MyURL從每一行,並通過添加LIMIT將其納入單個線在查詢

2)扎普重複的結束1

這就是我現在正在處理的內容。

$sql = "SELECT SUM(num) as num FROM (
SELECT COUNT(URL) AS num, 'World' AS GoSection, 'GW' AS MySite FROM gw_geog WHERE URL = :MyURL AND G1 = 1 
UNION ALL 
SELECT COUNT(URL) AS num, 'World' AS GoSection, 'GW' AS MySite FROM gw_geog_political WHERE URL = :MyURL 
) AS X 
WHERE X.URL LIKE :MyURL LIMIT 1"; 
$stmt = $pdo->prepare($sql); 
$stmt->bindParam(':MyURL',$MyURL,PDO::PARAM_STR); 
$stmt->execute(); 
$Total = $stmt->fetch(); 

但是,我得到錯誤信息未知列X.SUM(或X.URL等)。

有人可以告訴我正確的方法嗎?

+1

你能澄清 「ZAP重複」?對我來說,這意味着它應該只統計一次每個獨特的URL,無論它在哪個表中存在,是嗎? –

回答

6

使用查詢如下,你會得到你想要的輸出:

SELECT 
    SUM(num) AS num 
FROM 
(
    SELECT 
     COUNT(URL) AS num, 
     'World' AS GoSection, 
     'GW' AS MySite, 
     gw_geog.`URL` as URL 
    FROM 
     gw_geog 
    WHERE 
     URL = :MyURL 
    AND G1 = 1 
    UNION ALL 
     SELECT 
      COUNT(URL) AS num, 
      'World' AS GoSection, 
      'GW' AS MySite, 
      gw_geog_political.`URL` as URL 
     FROM 
      gw_geog_political 
     WHERE 
      URL = :MyURL 
) AS X 
WHERE 
    X.URL like :MyURL 
LIMIT 1 
1

如果我瞭解你,limit 1不是你要找的。

這裏有一個小提琴:http://sqlfiddle.com/#!9/5ffbd/5

SELECT count(URL) AS num 
    ,'World' AS GoSection 
    ,'GW' AS MySite 
FROM (
    SELECT URL 
     ,G1 
     ,'a' AS tbl 
    FROM gw_geog 

    UNION ALL 

    SELECT URL 
     ,G1 
     ,'b' AS tbl 
    FROM gw_geog 
    ) a 
WHERE a.tbl = 'b' 
    OR (
     a.tbl = 'a' 
     AND a.G1 = 1 
     ) 
    AND a.URL = :MyURL