我对各个部分和网站(例如 MySite/World、MySite2/World、MySite3/People)有一系列查询。它实际上是两个系列的查询 - 显示页面的 COUNT 查询和从我的数据库检索信息的更复杂的查询。
我现在正在将这些项目合并到新网站上的一个迷你百科全书中。下面的查询来自另一个不同但相关的项目,但它说明了我正在尝试做的事情。请注意,我为每个表中的数据提供了自己的标识,包括“GW”AS 站点、“GZ”AS 站点等。
$stm = $pdo->prepare("SELECT 'GW' AS Site, CGW.N, CGW.URL, CGW.Date, CGW.Year, CGW.Brief
FROM calendar_gw CGW
WHERE CGW.URL = :MyURL
UNION ALL
SELECT 'GZ' AS Site, CGZ.N, CGZ.URL, CGZ.Date, CGZ.Year, CGZ.Brief
FROM calendar_gz CGZ
WHERE CGZ.URL = :MyURL
ORDER BY Year");
$stm->execute(array(
'MyURL'=>$MyURL
));
现在我想知道是否有一种方法可以为 COUNT 查询中的多个表提供类似的 ID,如下所示:
$sql = "SELECT SUM(num) as num FROM (
SELECT COUNT(URL) AS num FROM pox_topics WHERE URL = :MyURL
UNION ALL
SELECT COUNT(URL) AS num FROM people WHERE URL = :MyURL
UNION ALL
SELECT COUNT(Taxon) AS num FROM gz_life WHERE Taxon = :MyURL
) AS X";
我实际上想给每个子查询两个 ID - 网站和部分。例如,中间查询的值应为 $Site = 'PX', $Section = 'People'。
我尝试过明显的解决方案,例如......
SELECT 'PX' AS Site COUNT(URL) AS num FROM people WHERE URL = :MyURL
SELECT COUNT(URL) AS num 'PX' AS Site FROM people WHERE URL = :MyURL
SELECT COUNT(URL) AS num FROM 'PX' AS Site people WHERE URL = :MyURL
但到目前为止还没有任何效果。我的最终目标可能是这样的:
SELECT COUNT(URL) AS num FROM people ('PX' AS Site 'People' AS Section) WHERE URL = :MyURL
有人可以向我展示正确的语法或告诉我是否无法在 COUNT 查询上传递静态值吗?如果我想要做的事情是不可能的,那么我认为唯一的解决方案是创建第二个中间子查询,仅设计用于传递静态值。
最佳答案
你的第一个版本几乎没问题。它只需要一个逗号:
SELECT 'PX' AS Site, COUNT(URL) AS num
FROM people
WHERE URL = :MyURL;
关于php - 在 COUNT 查询上传递静态值 (PHP/MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21225348/