2014-01-18 51 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");