【问题标题】:Static Value doesn't display (COUNT, UNION ALL query)不显示静态值(COUNT、UNION ALL 查询)
【发布时间】:2014-01-21 07:08:22
【问题描述】:

在此站点的大量帮助下,我现在有一个查询,它显示了来自多个数据库表的页面,其中 $MyURL 等于页面 URL(例如,MySite/Crazy_Horse 与表 people、字段 URL 中的值 Crazy_Horse 匹配)。

唯一剩下的问题是静态值(MySite2)。我无法在显示页面上回显它。然而它必须工作,因为如果我注释掉这一行 - $MySite2 = $row['MySite2']; - 我收到一条错误消息,提示 $MySite2 尚未定义。但是当我恢复该行时,错误消息消失了,但 echo $MySite2 没有显示任何内容。

谁能看出我做错了什么?

$sql = "SELECT SUM(num) as num FROM (
  SELECT 'GZ' AS MySite2, COUNT(Taxon) AS num FROM gz_life WHERE Taxon = :MyURL
  UNION ALL
  SELECT 'All' AS MySite2, COUNT(Name) AS num FROM gw_geog WHERE Name = :MyURL
  UNION ALL
  SELECT 'GS' AS MySite2, COUNT(URL) AS num FROM gs WHERE URL = :MyURL
 ) AS X";

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

while ($row = $stmt->fetch())
{
 $MySite2 = $row['MySite2'];
 $Total = $row['num'];
 switch($Total)
{
 case 1:
 require($BaseINC."/$MyPHP/inc/C/2_Child.php");
 break;
 case 0:
 require_once($BaseINC."/404.php");
 break;
 default:
 require($_SERVER['DOCUMENT_ROOT']."/Dupe.php");
 break;
  }
}

【问题讨论】:

  • 您不能调用MySite2,因为它不在您的外部SELECT 列表中。
  • 执行此操作时没有出错?根据to PDO docs 和我的经验,您不能在一个准备好的语句中重复使用:MyURL 3 次,同样this question
  • 试试php的var_dump(php.net/var_dump)来帮助调试

标签: php mysql


【解决方案1】:

以这种方式更改您的查询:

$sql = "SELECT X.MySite2, SUM(x.num) as num FROM (
  SELECT 'GZ' AS MySite2, COUNT(Taxon) AS num FROM gz_life WHERE Taxon = :MyURL
  UNION ALL
  SELECT 'All' AS MySite2, COUNT(Name) AS num FROM gw_geog WHERE Name = :MyURL
  UNION ALL
  SELECT 'GS' AS MySite2, COUNT(URL) AS num FROM gs WHERE URL = :MyURL
 ) AS X group by X.MySite2"

如果你想显示 MySite2,你必须根据这个值对你的聚合函数进行分组。

您无法显示,因为您的查询的可见性已由上级提供,因此我已将 MySite2 添加到您的字段列表中。

告诉我是否可以

【讨论】:

  • @Joe Taras - 这很奇怪;您的脚本运行良好……但前提是 MySite2 的值为“全部”。如果值为 'GZ' 或其他任何值,则没有错误消息,但我收到 404 错误页面;显然,$Total = $row['num'] 的值应该是 0,而应该是 1。
  • 这是我的代码: $sql = "SELECT X.MySite2, SUM(x.num) as num FROM ( SELECT 'All' AS MySite2, COUNT(Taxon) AS num FROM gz_life WHERE Taxon = : MyURL UNION ALL SELECT 'All' AS MySite2, COUNT(Name) AS num FROM gw_geog WHERE Name = :MyURL UNION ALL SELECT 'All' AS MySite2, COUNT(URL) AS num FROM people WHERE URL = :MyURL UNION ALL SELECT 'GS ' AS MySite2, COUNT(URL) AS num FROM gs WHERE URL = :MyURL ) AS X group by X.MySite2";
  • 404错误是HTTP错误,你必须分析为什么你的代码返回找不到页面错误。您的新查询可以确定字段可见性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
相关资源
最近更新 更多