如何在mysql中存储PHP数组


How to store PHP arrays in mysql?

如何将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)中。

限制为:

  1. 数组中的每个值不能大于999
  2. 任何数组的值不得超过21