MariaDB Dynamic Columns& JSON?

时间:2014-04-15 14:44:26

标签: json database mariadb

我试图在一个列中存储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 个答案:

答案 0 :(得分:7)

一切都在这里: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;