Динамические столбцы MariaDB и JSON?
Я пытаюсь сохранить данные JSON (в значительной степени массив в PHP, который может быть неизвестной длины) в столбце, который позволит мне делать, где запросы на него. Давайте рассмотрим это в качестве примера...
скажем, у меня есть поле, спрашивающее, какие виды спорта вам нравятся (и это флажок).
[] Soccer
[] Hockey
[] Football
[] Swimming
который затем будет отправлен через sports[]
массив для PHP. Затем я хочу взять это и добавить его в свою базу данных, чтобы он выглядел как
|sports|{hockey:false,swimming:true,football:false,soccer:true}|
или что-то в этом роде, что я тогда могли бы пойти
SELECT COUNT(*) FROM fields WHERE hockey = "false";
и я не могу понять, как правильно это сделать, игнорируя тот факт, что этот "пример" может быть легко выполнен путем присоединения, я хочу сделать это с помощью динамических столбцов mariadb (по крайней мере, я считаю, что это то, что я хочу). Я знаю, что могу сделать это с помощью Postgre.
1 ответов
это все здесь:https://mariadb.com/kb/en/dynamic-columns/
динамические столбцы хранятся внутри blob
столбец и вставляется так:
insert into data
values (data_id, user_id, COLUMN_CREATE(<dcolumn1>, <value1>, <dcolumn2>, <value2>, ...));
поэтому вы не будете использовать json здесь, вместо этого сериализуйте данные следующим образом:
$dynamic = array()
foreach($_POST['sports'] as $sport) {
$dynamicData[] = "'" . $sport . "'", TRUE;
}
$dynamicColumn = join(', ', $dynamicData);
будет генерировать что-то вроде
'hockey', TRUE, 'soccer', TRUE
для поиска всех строк для ppl играть в футбол:
... where COLUMN_GET(dynamic_blob, 'soccer' as soccer) = TRUE;