2015-10-07 92 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