MySQL до MariaDB - Dynami c Колонны? - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь перенести данные из old_table в table с некоторыми данными, находящимися в динамических c столбцах для будущего импорта

INSERT INTO `table` (`col_1`,`col_2`,etc....   `attributes`)
SELECT `col_1`,`col_2`,etc....     COLUMN_CREATE('name',`col_99` AS UNSIGNED,'name2',`col_100` AS CHAR)
FROM `old_table`

Единственная документация по динамическим c Таблицы в основном

COLUMN_CREATE('name',1 AS UNSIGNED) 

Это не очень "динамический" пример c ... ... 1009 *

Открыт для других решений, но НЕ JSON, предпочитает MariaDB, хотя это по сути MySQL к которому я привык

РЕДАКТИРОВАТЬ: большое спасибо за ответы, но за дополнительную информацию я пытаюсь использовать этот подход, задокументированный (плохо) здесь: https://mariadb.com/kb/en/dynamic-columns-functions/

Редактировать 2: Мне интересно, может ли EAV быть единственным решением, так как мне кажется, что я бью стену с помощью колонок MariaDB Dynami c, я не могу найти больше документации или руководств нигде!

Редактировать 3: Вам не повезло с этими динамическими c столбцами? MariaDB действительно сбивает с толку!

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Это то, что вы хотите?

INSERT INTO `table` (`col_1`, `col_2`, . . . col_99, col_100)
    SELECT `col_1`, `col_2`, . . ., 'name' as col_99, 
           CAST(NULL as char) as col_100  
    FROM `old_table`;

Просто перечислите столбцы с их псевдонимами; используйте константы для новых столбцов.

0 голосов
/ 06 марта 2020

Для столбцов Dynami c, JSON или EAV вы пропускаете пустые «столбцы». Вы просто включаете ненулевые элементы.

Я бы порекомендовал вам отказаться от Dynami c Columns; они существуют только в одном месте. Между тем, JSON становится все более приемлемым. И даже если вы используете «старую» версию MariaDB или MySQL, вы можете поместить JSON текст в столбец TEXT.

Имейте в виду, что ни одна из техник, подобных eav, не является очень чисто.

Подробнее о проблемном пространстве: http://mysql.rjweb.org/doc.php/eav

Что касается «более доступного для поиска» - вам, вероятно, нужно идти на компромиссы:

  • Часто просматриваемые поля: преобразовать в столбцы с INDEXes.
  • Рассмотрим индекс FULLTEXT с некоторыми данными text . Просто добавьте все это в один текстовый столбец для эффективного поиска.
  • Если вам нужно искать слишком много разных полей; используйте код своего приложения для декодирования JSON для завершения sh поиска (после того, как вы отфильтровали то, что вы можете в SQL).
  • То есть не ожидайте, что все сделает в SQL.
...