2014-01-20 40 views
0

在本網站的許多幫助下,我現在有一個查詢顯示來自幾個數據庫表的頁面,其中$ MyURL等於一個頁面URL(例如MySite/Crazy_Horse匹配表格中的值Crazy_Horse,字段URL)。靜態值不顯示(COUNT,UNION ALL查詢)

剩下的唯一問題是靜態值(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; 
    } 
} 
+0

您不能調用'MySite2',因爲它不在您的外部'SELECT'列表中。 – Kermit

+0

執行此操作時,您沒有收到錯誤信息?根據[PDO文檔](http://www.php.net/manual/en/pdo.prepare.php)和我的經驗,你不能在一個準備好的語句中重複使用':MyURL'3次,[這個問題](http://stackoverflow.com/questions/2432084/pdo-parameterized-query-reuse-named-placeholders) –

+0

嘗試使用php的'var_dump'(http://www.php.net/var_dump)來幫助調試 – tr33hous

回答

0

更改這種方式查詢:

$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。

告訴我是否可以

+0

@喬塔拉斯 - 這很奇怪;你的腳本工作得很好......但只有當MySite2的值是'All'時。如果值是'GZ'或其他任何東西,沒有錯誤消息,但我得到一個404錯誤頁面;顯然,$ Total = $ row ['num']的值應爲1時爲0。 –

+0

這是我的代碼: $ 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 選擇 '全部' AS MySite2,COUNT(名稱)爲num從gw_geog其中name =:MyURL UNION ALL 選擇 '全部' AS MySite2,COUNT(URL)爲num從不同人的URL =:MyURL UNION ALL SELECT 'GS'AS MySite2,COUNT(URL)AS num FROM gs WHERE URL =:MyURL )AS X group by X.MySite2「; –

+0

404錯誤是一個HTTP錯誤,您必須分析爲什麼您的代碼返回未找到頁面錯誤。您的新查詢沒有關於字段可見性的問題。 –