2014-10-02 186 views
0

我有一個爲多個網站設置的門票系統。數據庫中的每個表在所有網站上都是相同的。來自多個數據庫的查詢

我的問題是我將如何查詢每個數據庫的多個表?

例子:

  • 我有5張數據庫狗
  • 開我有2張門票在數據庫貓開放

我需要編寫一個查詢,會告訴我什麼是最近提交的票證。

所以我想知道票的來源和發佈時間。

這是我嘗試過的,但需要一些指導,因爲我以前從未使用過多個數據庫。

$database_1 = 'dogs'; 
$database_2 = 'cats'; 

$recent = DB::getInstance()->query(" 
SELECT `st_id`,`dates`,`complex` FROM {$database_1}.`support_ticket` WHERE `status` = 'OPEN' ORDER BY `dates` DESC LIMIT 1 
UNION ALL 
SELECT `st_id`,`dates`,`complex` FROM {$database_2}.`support_ticket` WHERE `status` = 'OPEN' ORDER BY `dates` DESC LIMIT 1 "); 

foreach($recent->results() as $r): 
?> 
<div class="box-bottom">Most Recent: <?php echo escape($r->complex); ?> - 
<?php echo escape (date("F d, Y - h:i a", strtotime ($r->dates))); ?></div> 
<?php endforeach ?> 

任何幫助,將不勝感激。

+0

永不考慮到這一工作的''選擇st_id','dates','complex' FROM {$ database_1} .'support_ticket' UNION ALL SELECT 'st_id '''日期','複雜'從{$ database_2} .'support_ticket'哪裏'status' ='OPEN'ORDER BY'日期'DESC LIMIT 1「); ' – echo 2014-10-02 19:08:15

回答

1

只需使用一個ORDER BY語句

SELECT `st_id`,`dates`,`complex` 
FROM {$database_1}.`support_ticket` 
WHERE `status` = 'OPEN' 
UNION ALL 
SELECT `st_id`,`dates`,`complex` 
FROM {$database_2}.`support_ticket` 
WHERE `status` = 'OPEN' 
ORDER BY `dates` DESC LIMIT 1 
+1

是的工作,只是在我完成後試過寫下這個問題,感謝您的幫助,雖然!=) – echo 2014-10-02 19:10:16

+0

你知道更好的方法來從每個表中選擇這不起作用,但是這樣的: 'SELECT whatever FRO M狗和cats.support_ticket ....等' – echo 2014-10-02 19:14:00

+1

實際上開始寫一個JOIN查詢,但這沒有意義。這是現在最好的方式,因爲您現在擁有該數據庫,而不必重構數據庫,以便通過包含'cats'或'dogs'的列來區分一個數據庫中的所有支持票據。這可能是我在設計數據庫時會做到的。 – 2014-10-02 19:14:57