2016-01-07 50 views
3

嗨我想從另一個數據庫中查詢表(名稱:table_guest_id),其中表名取決於主查詢。 這裏是我的數據庫的建立:來自另一個數據庫的MySQL子查詢,其中表名取決於主要查詢

  • 三個表:事件,輪廓,table_guest_id
  • 兩個數據庫:主,客(數據庫下面只是要清楚)
  • 主要包括:事件和簡介
  • 來賓包括:table_guest_id(其中id = e.ID)

,這是我的SQL代碼:

public function getListAttendee($user) 
    { 
     $sql = "SELECT p.name e.user, e.ID, e.date 
       FROM events e, profile p 
       WHERE p.user_id=e.user AND e.event_date >= CURDATE() 
       AND (SELECT COUNT(*) 
        FROM dbName.table_guest_[??note: need to insert e.ID??] a 
        WHERE a.event_id=e.ID AND a.user_id='{$user}' AND 
        a.status='invited') > 0"; 
    } 

我已經把ID或e.ID插入其中,但它還沒有工作。 請讓我知道,如果你有不同的解決方案,如何子查詢表的名稱取決於主要查詢值的表。 這是甚麼想法嗎?

+1

愚蠢的問題可能是 - 你可以使用'mysqli_'或'PDO'你怎麼查詢瞭解的第二個數據庫,因爲它僅知道表只能創建一個單一的數據庫連接是存在於它連接到 – RiggsFolly

+0

嗨裏格斯,感謝您的答覆,所以我的意圖是查詢第二個數據庫,其中所有表名爲table_guest_id,其中ID取決於事件ID,我將從主要查詢中獲得。你認爲這是不可能的嗎? –

+0

我會很感興趣地看這個問題,看看有沒有人可以在這個問題上教育我們。 「External」和「Federated」這兩個詞讓人浮想聯翩,但只是模糊不清 – RiggsFolly

回答

1

看來你試圖對SQL表名執行變量替換。

FROM dbName.table_guest_[??note: need to insert e.ID??] a 

您不能直接在SQL中這樣做™。您需要編寫您的php代碼來生成該表名,或者使用MySQL團隊調用的字符串處理功能prepared statements.

如果您的不同數據庫託管在同一MySQL服務器上,則可以編寫查詢一次不止一個。只需提供數據庫名稱以及表名即可。例如,如果您有數據庫db1db2,則可以執行此操作。

SELECT whatever 
    FROM db1.events e 
    JOIN db2.user_118 u ON whatever = whatever 
+0

這是查詢中適當的單詞變量替換。看來你是對的,那是一個很大的侷限。感謝奧利答案。 –

相關問題