如何将php数组存储在mysql中,然后进行过滤?
例如:
$array = array("a"=>13,"b"=>15,"c"=>17);
$mysql_val = json_encode($array);
mysql_query("INSERT INTO bla (`myfield`) VALUES('".$mysql_val."')");
^- i store data in this way
当我执行这个查询时,我如何对它进行筛选、排序等?例如,如何选择b大于10的行?
这正是数据库规范化的原因,特别是第一范式,避免重复组。通过原子化地存储数据(数据不能分解成更小的部分),您将能够对数据执行操作。
首先,你使用数据库不正确,这就是为什么你不能过滤排序等…
您应该为每个a, b, c
都有一列,然后您可以使用SELECT * FROM bla ORDER BY a DESC
,或者可能更适合您,使用映射keys=>值的表。
通过将数据存储为字符串MySQL无法访问数据,因此无法对其进行排序。
如果你不知道密钥(字段)名称,存储这些数据的正确(规范化)方式如下:
bla
id | name
-- | ----
2 | james
blaDecorator or blaColumns
id | blaId | field | value
1 | 2 | a | 13
2 | 2 | b | 15
3 | 2 | c | 17
如果必须保持这样的数据(我看不出为什么),那么您需要SELECT * FROM bla
将其作为Array
读取到PHP中,并使用PHP 进行所有排序
以下是学习数据库规范化的资源:http://www.phlonx.com/resources/nf3/
不,JSON数据对于MySQL来说只是一段文本,因此除了运行通常的文本函数之外,它无法处理它。
您必须从数据库和文本中读取它们,并将其转换为PHP级别的JSON,然后在应用程序中进行排序或筛选。
如果这对您考虑使用NoSQL数据库至关重要,那么其中许多数据库都是基于JSON的。
您没有。
这是一种在数据库中存储数据的糟糕方法。将数据存储为列,并将数据库用作数据库。
但是,如果必须,请使用PostgeSQL。请参阅:http://blog.redfin.com/devblog/2012/03/json_in_postgres.html
PostgeSQL的最新版本具有查询json字符串中的数据并对其进行联接的功能。
如果您想将数据存储为json,也许您应该考虑使用像MongoDB这样的文档数据库。有了它,您将能够在json数据中搜索、过滤等
不要这样存储数据!制作3个字段并将数据存储在这些字段中。
示例:
$array = array("a"=>13,"b"=>15,"c"=>17);
$fields = array_keys($array);
mysql_query(
"INSERT INTO bla ( " . explode(',', $fields) . ")
VALUES('" . explode(',' $array) . "')");
当所有响应者都质疑DB的使用时。在实际的用例中,这是合适的。我正面临这样一个问题,这就是我的解决方案:
function prepareArrayToSave($array) {
return (implode("", array_map("numberPad", $array)));
}
function numberPad($i) {
return sprintf("%03d", $i);
}
保存在字段Decimal(64)
中。
限制为:
- 数组中的每个值不能大于999
- 任何数组的值不得超过21