2014-01-18 102 views
0

下面的查询只是来自三个不同网站的查询集合,链接在一起形成第四个网站中的单个查询。通过查询传递值(PHP/MySQL)

它工作正常,但我需要弄清楚如何维护每个子查询的身份。例如,如果脚本显示表calendar_gw中的一些数据,我想知道该数据最初与网站GeoWorld(gw)相关联。然后,我可以修改内容/显示,或者简单地添加一个注释“来自GeoWorld的数据”。

我认为显而易见的解决办法是简单地使用别名,像这样...

CGZ.Brief AS GZ_Brief 

然后我可以进入while循环,并插入类似下面的一个...

$Brief = $row['GZ_Brief]; 
$Brief = $row['CGZ.GZ_Brief]; 
$Brief = $row['CGZ_Brief]; 

但这些都不适合我。另一种解决方案,甚至可能更好,将是创建一个PHP开关,不知怎的,一个网站与输出关联...

switch($Brief) 
{ 
case 'CGZ_Brief': 
$MySiteID = 'GW'; 
break; 
default: 
break; 
} 

谁能告诉我如何完成我想要做什么? (顺便说一句,价值$ MyURL是一个简单的页面URL,像May_1在URL中的MySite /日历/ May_1。)

$stm = $pdo->prepare("SELECT CGW.N, CGW.URL, CGW.Date, CGW.Year, CGW.Brief 
FROM calendar_gw CGW 
WHERE CGW.URL = :MyURL 
UNION ALL 
SELECT CGZ.N, CGZ.URL, CGZ.Date, CGZ.Year, CGZ.Brief 
FROM calendar_gz CGZ 
WHERE CGZ.URL = :MyURL 
UNION ALL 
SELECT CSL.N, CSL.URL, CSL.Date, CSL.Year, CSL.Brief 
FROM calendar_sl CSL 
WHERE CSL.URL = :MyURL 
ORDER BY Year"); 
$stm->execute(array(
'MyURL'=>$MyURL 
)); 

$prevYear = null; 
while ($row = $stm->fetch()) 
{ 
$Brief2 = $row['Brief']; 
    $Year = $row['Year']; 
    if ($Year == $prevYear) { 
    $YearStr = '• '; 
    } else { 
    $YearStr = $Year . '– '; 
    $prevYear = $Year; 
} 
    $Brief[] = $YearStr.$row['Brief']; 
} 

回答

1

你为什么不只是添加一个静态值?

$stm = $pdo->prepare("SELECT 'CGW' AS Site, CGW.N, CGW.URL, CGW.Date, CGW.Year, CGW.Brief 
FROM calendar_gw CGW 
WHERE CGW.URL = :MyURL 
UNION ALL 
SELECT 'CGZ' AS Site, CGZ.N, CGZ.URL, CGZ.Date, CGZ.Year, CGZ.Brief 
FROM calendar_gz CGZ 
WHERE CGZ.URL = :MyURL 
UNION ALL 
SELECT 'CSL' AS Site, CSL.N, CSL.URL, CSL.Date, CSL.Year, CSL.Brief 
FROM calendar_sl CSL 
WHERE CSL.URL = :MyURL 
ORDER BY Year");