Динамические столбцы 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;