MySQL Неопределенный индекс: column_info при создании представления - PullRequest
1 голос
/ 11 апреля 2019

Я определил этот запрос, который отлично работает:

    SELECT `a`.`id`,
        `a`.`fld_tribunal` AS `fld_tribunal`,
        `a`.`fld_date` AS `fld_date`,
        `a`.`fld_juge` AS `fld_juge`,
        `a`.`fld_representant_prefecture` AS `fld_representant_prefecture`,
        `a`.`fld_interpretes` AS `fld_interpretes`,
        `a`.`fld_nombre_policiers` AS `fld_nombre_policiers`,
        `a`.`fld_retenus_menottes` AS `fld_retenus_menottes`,
        `a`.`fld_representants_cdv` AS `fld_representants_cdv`,
        `a`.`fld_public` AS `fld_public`,
        `a`.`fld_duree_audience` AS `fld_duree_audience`,
        `a`.`fld_duree_delibere` AS `fld_duree_delibere`
    FROM `cr_tribunaux` `a`
    INNER JOIN `list_records` `r`
        ON ((`r`.`form_id` = 8) AND (`r`.`record_id` = `a`.`id`))
    INNER JOIN `list_states` `s`
        ON ((`s`.`id` = `r`.`state_id`) AND (`s`.`form_id` = `r`.`form_id`) )
    WHERE `s`.`id`=74 OR `s`.`id`=75
    ORDER BY `a`.`fld_date` ASC

, но когда я пытаюсь создать представление из него с помощью phpMyadmin, выдает ошибку:

Notice in ./libraries/SystemDatabase.php#52
Undefined index: column_info

Backtrace

./view_create.php#140: PMA\libraries\SystemDatabase->getExistingTransformationData(string 'maindb')

Когда яУдалите операторы INNER JOIN, представление хорошо создано, поэтому должно быть что-то в синтаксисе, который я использую, или (я надеюсь, нет) в таблицах, на которые нацелены соединения.Я пробовал разные комбинации скобок, но ничего не помогает.

Код создания таблицы для трех связанных таблиц:

CREATE TABLE `cr_tribunaux` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `storage_id` int(11) NOT NULL DEFAULT '4',
 `user_id` int(11) NOT NULL DEFAULT '0',
 `created` datetime NOT NULL DEFAULT '2018-07-10 09:51:32',
 `created_by` varchar(255) NOT NULL DEFAULT '',
 `modified_user_id` int(11) NOT NULL DEFAULT '0',
 `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
 `modified_by` varchar(255) NOT NULL DEFAULT '',
 `fld_tribunal` text NOT NULL,
 `fld_juge` text NOT NULL,
 `fld_date` text NOT NULL,
 `fld_representant_prefecture` text NOT NULL,
 `fld_nombre_policiers` text NOT NULL,
 `fld_retenus_menottes` text,
 `fld_public` text NOT NULL,
 `fld_representants_cdv` text NOT NULL,
 `fld_duree_delibere` text,
 `fld_compte_rendu` text NOT NULL,
 `fld_remarques` text NOT NULL,
 `fld_interpretes` text NOT NULL,
 `fld_duree_audience` text NOT NULL,
 `fld_retenus_menottes_detail` text NOT NULL,
 PRIMARY KEY (`id`),
 KEY `storage_id` (`storage_id`),
 KEY `user_id` (`user_id`),
 KEY `created` (`created`),
 KEY `modified_user_id` (`modified_user_id`),
 KEY `modified` (`modified`)
) ENGINE=MyISAM AUTO_INCREMENT=747 DEFAULT CHARSET=utf8```

CREATE TABLE `list_states` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `form_id` int(11) NOT NULL DEFAULT '0',
 `title` varchar(255) NOT NULL DEFAULT '',
 `color` varchar(255) NOT NULL DEFAULT '',
 `action` varchar(255) NOT NULL DEFAULT '',
 `published` tinyint(4) NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=221 DEFAULT CHARSET=utf8


CREATE TABLE `list_records` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `form_id` int(11) NOT NULL DEFAULT '0',
 `record_id` bigint(20) NOT NULL DEFAULT '0',
 `state_id` int(11) NOT NULL DEFAULT '0',
 `reference_id` int(11) NOT NULL DEFAULT '0',
 `published` tinyint(1) NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`),
 KEY `form_id` (`form_id`,`record_id`,`state_id`)
) ENGINE=MyISAM AUTO_INCREMENT=811 DEFAULT CHARSET=utf8

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Я нашел способ обойти проблему, которая является хорошим решением для моих нужд. Представление, которое я пытался создать, выбирает «действительные» записи из таблицы cr_tribunaux. Позже это представление было присоединено к вторичной таблице, в результате чего был получен список «допустимых» записей со всеми необходимыми столбцами. Затем я создал более простое представление без JOIN с таблицами «list_records» и «list_states», а во втором представлении я представляю функциональность проверки записи.

Как ни странно, Mysql не жаловался на это новое представление, поэтому теперь у меня есть окончательное составное представление, которое дает мне результат, который я искал: -)

Я думаю, что Mysql нужна была небольшая "помощь", чтобы понять, как сделать то, что я хотел.

Хотя это решает мою проблему, оно не дает ответа на основную проблему, вызвавшую ошибку.

Спасибо за вашу помощь.

0 голосов
/ 12 апреля 2019

Для создания представления вы можете использовать приведенный ниже код

CREATE VIEW sample_test AS
SELECT `a`.`id`,
        `a`.`fld_tribunal` AS `fld_tribunal`,
        `a`.`fld_date` AS `fld_date`,
        `a`.`fld_juge` AS `fld_juge`,
        `a`.`fld_representant_prefecture` AS `fld_representant_prefecture`,
        `a`.`fld_interpretes` AS `fld_interpretes`,
        `a`.`fld_nombre_policiers` AS `fld_nombre_policiers`,
        `a`.`fld_retenus_menottes` AS `fld_retenus_menottes`,
        `a`.`fld_representants_cdv` AS `fld_representants_cdv`,
        `a`.`fld_public` AS `fld_public`,
        `a`.`fld_duree_audience` AS `fld_duree_audience`,
        `a`.`fld_duree_delibere` AS `fld_duree_delibere`
    FROM `cr_tribunaux` `a`
    INNER JOIN `list_records` `r`
        ON ((`r`.`form_id` = 8) AND (`r`.`record_id` = `a`.`id`))
    INNER JOIN `list_states` `s`
        ON ((`s`.`id` = `r`.`state_id`) AND (`s`.`form_id` = `r`.`form_id`) )
    WHERE `s`.`id`=74 OR `s`.`id`=75
    ORDER BY `a`.`fld_date` ASC;

Даже после попытки с этим, если вы получите ошибку, то это должно быть проблемой с вашим PHPMyadmin.Вы можете попробовать с любым другим клиентом (например, mysqlworkbench, sqlyog, HeidiSql), в зависимости от вашей операционной системы, создать это представление.

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