Каким будет лучший способ создать представление в mysql со следующими макетами базы данных? - PullRequest
0 голосов
/ 25 сентября 2018

Я просмотрел TON примеров представления MySQL, поэтому я предполагаю, что то, что я пытаюсь сделать, может оказаться невозможным.

У меня есть несколько баз данных: db1, db2, db3 ....... У каждой есть таблица: кавычки Столбцы в идентичных таблицах: DateSubmitted DATETIME, TimeFinished DATETIME, Status VARCHAR (64)

Я пытаюсь получить представление, которое я хотел бы создать или заново создать при добавлении новых баз данных, которые могут выполнять некоторые вычисления между DateSubmitted и TimeFinished на основе статуса (Ошибка, TimeOut, Success)

Результат Iищу что-то вроде этого:

Database|AvgTimeLast24Hours|AvgTimeLastWeek|AvgTimeLastMonth

|db1|60|48 | 40 |

| db2  | 185 | 125 | 105

|db3 | 14 | 18 | 23 |

Средние столбцы будут в минутах, у меня есть запросы, чтобы получить расчеты, но когда я пытаюсь представить это в виде, я знаю, что я делаю этонеправильно.

У кого-нибудь есть примеры?

1 Ответ

0 голосов
/ 25 сентября 2018

У вас есть запрос на создание необходимого результирующего набора, предположительно, из одной из ваших нескольких баз данных.Допустим, это 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.Конечно, это работает, только если все базы данных находятся на одном сервере (или если вы что-то делаете с удаленными ссылками на таблицы, которые вы можете посмотреть).

Нельзя использовать переменные в запросах к базе данных илиимена таблиц.Это должен быть постоянный текст.Раймонд прав, когда говорит, что вы не сможете написать запрос, который успешно ссылается на объединение всех баз данных в вашей системе.Вам нужно будет запустить эту операцию.

  1. написать запрос (используя, вероятно, information_schema.TABLES), чтобы написать свой запрос CREATE VIEW AS... или какой-либо другой запрос, ссылающийся на все ваши базы данных.

  2. выполнить тот запрос, который вы сделали.

Вы можете создать и запустить его либо в программе php, либо с помощью MySQL-сервер готовых операторов (отличается от подготовленных операторов в mysqli или PDO).

Хитрость заключается в том, чтобы заставить вещи работать поэтапно.

Совет: Отдельная база данных для каждого клиента общеизвестно труднаувеличить масштаб.Чем успешнее вы становитесь, тем труднее становится.Это не хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...