我试图在一个列中存储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做到这一点.
一切都在这里:https://mariadb.com/kb/en/dynamic-columns/
动态列存储在实际blob
列中并插入如下:
insert into data values (data_id, user_id, COLUMN_CREATE(, , , , ...));
所以你不会在这里使用json,而是用这种方式序列化数据:
$dynamic = array() foreach($_POST['sports'] as $sport) { $dynamicData[] = "'" . $sport . "'", TRUE; } $dynamicColumn = join(', ', $dynamicData);
会产生类似的东西
'hockey', TRUE, 'soccer', TRUE
要搜索所有行以播放足球:
... where COLUMN_GET(dynamic_blob, 'soccer' as soccer) = TRUE;