我试图在一个列中存储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做到这一点。
答案 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;