我有一系列的MySQL工會,看起來像下面這樣:跨表名爲動態的2個數據庫的mysql UNION?
$stmt=$db->prepare('SELECT * FROM social_posts WHERE username IN (
SELECT friend2 as username FROM list_friends
WHERE (friend1 = :username AND friend2 <> :username)
UNION
SELECT friend1 as username FROM list_friends
WHERE (friend2 = :username AND friend1 <> :username)
)');
$stmt->bindParam(':username', $username);
$stmt->execute();
$row = $stmt->fetchAll();
我需要在第二數據庫的類似工會適用於動態表。我對該數據庫/表的當前SELECT語句如下所示。
if ($db2->query("SHOW TABLES LIKE 'elfinder_file_".strtolower(:username)."'"
)->rowCount() > 0){
$stmt=$db2->prepare("SELECT * FROM elfinder_file_".strtolower(:username)."
WHERE mime <> 'directory' GROUP BY time");
$stmt->execute();
$row4 = $stmt->fetchAll();
}
我遇到的問題是,在第一部分中的UNION,是選擇基於$用戶名的好友資料,我不知道我怎麼可以申請這樣的事情在代碼的第二部分。
我將如何傳遞的朋友$ USERNAME到動態表用strtolower(:用戶名)兩者的SHOW TABLES語句和SELECT語句?
備註: 我不能使用foreach循環來獲取朋友,然後通過第二個表循環它們。這是因爲其他表的結果與此表的結果不匹配。我也不能使用一個巨大的循環來獲取朋友,並通過每個表循環它們,因爲每個循環實例都會覆蓋循環的最後一個實例,並將循環結果作爲循環外的數組回送。該數組對於循環的每個實例都會有所不同。
以用戶名命名的db表可能是一個真正的壞主意 – nogad
該信念的任何邏輯原因?它不像表名是你需要保密的東西。如果你這樣做,大多數開源軟件將處於很大的劣勢 – Bruce
我沒有看到你在哪裏訪問不同的數據庫名稱。在數據庫中訪問表的語法是'databasename.tablename',但是你沒有'.'分隔符。 – Barmar