powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / как объединить таблицы по имени с символом подстановки?
3 сообщений из 3, страница 1 из 1
как объединить таблицы по имени с символом подстановки?
    #39621278
ef1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ef1
Гость
здравствуйте, (в синтаксисе mySQL не компетишн) не подскажите такой вопрос
у нас есть атс asterick которая ведет в mySql журнал вызовов по месяцам
нам, для удобства, написали скрипт который объединяет существующие базы по расписанию раз в час - но вот проблема
в запросе на создание сводной таблицы - таблицы для объединения указаны в явном виде - и в прошлом месяце они закончились на таблице cdr_201802

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
CREATE TABLE `cdr_summary` (
  `AcctId` INTEGER(11) DEFAULT NULL,
  `datetime` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  `clid` VARCHAR(80) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `src` VARCHAR(80) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `dst` VARCHAR(80) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `dcontext` VARCHAR(80) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `srctrunk` VARCHAR(80) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `dstrunk` VARCHAR(80) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `lastapp` VARCHAR(80) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `lastdata` VARCHAR(80) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `duration` INTEGER(11) NOT NULL DEFAULT 0,
  `billable` INTEGER(11) NOT NULL DEFAULT 0,
  `disposition` VARCHAR(45) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `amaflags` INTEGER(11) NOT NULL DEFAULT 0,
  `calltype` VARCHAR(255) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `accountcode` VARCHAR(20) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `uniqueid` VARCHAR(32) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `monitorpath` VARCHAR(256) COLLATE utf8_general_ci DEFAULT NULL,
  `extfld1` VARCHAR(256) COLLATE utf8_general_ci DEFAULT NULL,
  `extfld2` VARCHAR(256) COLLATE utf8_general_ci DEFAULT NULL,
  `extfld3` VARCHAR(256) COLLATE utf8_general_ci DEFAULT NULL
) ENGINE=MERGE
UNION=(`cdr_201609`,`cdr_201610`,`cdr_201611`,`cdr_201612`,`cdr_201701`,`cdr_201702`,`cdr_201703`,`cdr_201704`,`cdr_201705`,`cdr_201706`,`cdr_201707`,`cdr_201708`,`cdr_201709`,`cdr_201710`,`cdr_201711`,`cdr_201712`,`cdr_201801`,`cdr_201802`) INSERT_METHOD=LAST ROW_FORMAT=DYNAMIC CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'
;


не подскажите как переписать UNION чтобы он объединял все существующие на текущий момент в БД таблицы например по имени cdr_% ?
...
Рейтинг: 0 / 0
как объединить таблицы по имени с символом подстановки?
    #39621360
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Merge не поддерживает НИКАКИХ шаблонов.

Делайте процедуру, которая получит имена всех таблиц из INFORMATION_SCHEMA.TABLES, сформирует текст запроса в переменной и выполнит его через PREPARED STATEMENT. Типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE PROCEDURE RenewStructure()
AS
BEGIN
    SELECT CONCAT('.....',                     -- начало запроса 
                  GROUP_CONCAT(table_name),    -- список таблиц
                  '.....')                     -- хвост запроса
        INTO @sql
    FROM INFORMATION_SCHEMA.TABLES
    WHERE table_schema = 'db_name'
    AND table_name LIKE 'cdr_%';

    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DROP PREPARE stmt;
END;

И запускайте её по факту появления очередной таблицы...
...
Рейтинг: 0 / 0
как объединить таблицы по имени с символом подстановки?
    #39621365
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И да - Вы же не собираетесь добавлять данные в таблицы через объединённую? тогда убирайте нафиг всё лишнее - и начните с дефолтных значений полей.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / как объединить таблицы по имени с символом подстановки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]