У вас есть запрос на создание необходимого результирующего набора, предположительно, из одной из ваших нескольких баз данных.Допустим, это SELECT SUM(foo) foo, baz FROM quotes ORDER BY baz
.(Я знаю, что это не так, но вы не показали свой запрос.)
Затем в той же базе данных вы можете легко создать его как представление.
CREATE VIEW summary
AS
SELECT SUM(foo) foo, baz FROM quotes ORDER BY baz;
Получитьэто представление работает правильно.
Затем вы можете создать другое представление, используя объединение таблиц в ваших различных базах данных.
CREATE VIEW all_quotes AS
SELECT * FROM db1.quotes
UNION ALL SELECT * FROM db2.quotes
UNION ALL SELECT * FROM db3.quotes
/* etc etc ad nauseam */
Затем измените ваше первое представление на ссылку all_quotes
вместо quotes
.Конечно, это работает, только если все базы данных находятся на одном сервере (или если вы что-то делаете с удаленными ссылками на таблицы, которые вы можете посмотреть).
Нельзя использовать переменные в запросах к базе данных илиимена таблиц.Это должен быть постоянный текст.Раймонд прав, когда говорит, что вы не сможете написать запрос, который успешно ссылается на объединение всех баз данных в вашей системе.Вам нужно будет запустить эту операцию.
написать запрос (используя, вероятно, information_schema.TABLES
), чтобы написать свой запрос CREATE VIEW AS...
или какой-либо другой запрос, ссылающийся на все ваши базы данных.
выполнить тот запрос, который вы сделали.
Вы можете создать и запустить его либо в программе php, либо с помощью MySQL-сервер готовых операторов (отличается от подготовленных операторов в mysqli
или PDO
).
Хитрость заключается в том, чтобы заставить вещи работать поэтапно.
Совет: Отдельная база данных для каждого клиента общеизвестно труднаувеличить масштаб.Чем успешнее вы становитесь, тем труднее становится.Это не хорошо.