Mysql столбец таблицы содержит имя базы данных -> выбрать транзакции из указанной базы данных? - PullRequest
0 голосов
/ 03 апреля 2020

надеюсь, я достаточно ясен ..

У меня есть эта mysql установка, где у меня есть одна центральная база данных (называемая Центральной), в которой есть таблица учетных записей, которая содержит все учетные записи пользователей, а затем для каждой У пользователя есть отдельная база данных, в которой хранятся их транзакции.

Центральная таблица выглядит примерно так:

CREATE TABLE Central.accounts (
    ID int UNSIGNED NOT NULL AUTO_INCREMENT,
    UserID int(10) NOT NULL,
    DatabaseRef varchar(20)
)

Я хотел бы сделать следующее: Извлечь все строки из таблицы транзакций в База данных, на которую ссылается столбец Central.accounts -> DatabaseRef

SELECT * FROM [CA.DatabaseRef].Transactions T

JOIN Central.accounts CA ON CA.ID = T.UserID

WHERE CA.UserID = 2

Возможно ли это как-нибудь? В конечном итоге я хотел бы сделать это в одном запросе, а не делать это с php.

1 Ответ

1 голос
/ 03 апреля 2020

Вы можете использовать операторы для такого запроса.

Конечно, часть lasz не работает, потому что нет такой базы данных или таблицы.

CREATE TABLE accounts (
    ID int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    UserID int(10) NOT NULL,
    DatabaseRef varchar(20)
);
INSERT INTO accounts VALUES (NULL,2,'test');
SELECT DatabaseRef INTO @sql FROM accounts WHERE UserID = 2;
SELECT @sql;
| @sql |
| :--- |
| test |
SET @sql = CONCAT('SELECT * FROM ',@sql,'.Transactions T WHERE T.UserID = 2');
SELECT @sql;
| @sql                                                 |
| :--------------------------------------------------- |
| SELECT * FROM test.Transactions T WHERE T.UserID = 2 |
PREPARE test FROM @sql;
EXECUTE test;
SELECT command denied to user 'u_1350201779'@'localhost' for table 'Transactions'

db <> скрипка здесь

...