PHP查询在表中搜索Json值

PHP查询在表中搜索Json值,php,mysql,json,Php,Mysql,Json,我想知道我是否可以用普通PHP实现以下功能: 我想根据json字符串中的值检索数据库中的一行。字符串如下所示: { "ext":{ "pdf":3 }, "count":3 } 我想检索PDF等于4的所有行 这在PHP中是可能的吗?进行查询并仅搜索Json值。像这样: SELECT id FROM table WHERE ext->pdf = 4 我试着自己搜索它,但我一直在得到讨论将查询结果编码为Json的网页的结果,而不是我试图实现的结果。不,这是不可

我想知道我是否可以用普通PHP实现以下功能:

我想根据json字符串中的值检索数据库中的一行。字符串如下所示:

{
   "ext":{
      "pdf":3
   },
   "count":3
}
我想检索PDF等于4的所有行

这在PHP中是可能的吗?进行查询并仅搜索Json值。像这样:

SELECT id FROM table WHERE ext->pdf = 4

我试着自己搜索它,但我一直在得到讨论将查询结果编码为Json的网页的结果,而不是我试图实现的结果。

不,这是不可能的。关系数据库中的Json数据不由数据库引擎解析

编辑:阅读有关此功能最新支持的评论和贡献

您可以自由地将json存储到数据库中,但这样做时,您可以接受放弃使用json数据,就像将json数据存储在数据库的列中一样,作为其他关系数据库数据。通常,只有当您知道不需要直接根据json结构中包含的某些数据进行搜索或更新,并且json数据不需要按照查询中存储在“正常”列中的数据的方式进行更新时,您才将json数据存储在db中

你可以:

1-使用db表的另一列存储pdf值(或查询中可能相关的任何其他json数据),并在查询中使用它,确保pdf列及其相对json始终同步

2-使用db原生字符串或regexp函数手动解析json字符串,但这非常昂贵,尤其是对于大型表或大型json。这可能会使您的查询时间非常长


3-使用非关系型数据库,如mongoDb,您可以在其中以不同方式存储数据,如果您经常需要执行此类任务

如果我正确理解您的问题,则您已经知道ext,即每次都是“pdf”。考虑到您可以按如下方式构建查询:

$json = '{
   "ext":{
      "pdf":3
   },
   "count":3
}';

$data = json_decode($json);

SELECT id FROM table WHERE pdf = $data['ext']['pdf'];
$where = '';
foreach ($data['ext'] as $ext => $value)
{
    $where .= ' ' . $ext . ' = ' . $value . ' OR';
}

$where = rtrim($where, 'OR');

$query = 'SELECT id FROM table WHERE] . $where;
例如,从pdf=3的表格中选择id

如果您不确定扩展,则可以尝试以下操作:

$json = '{
   "ext":{
      "pdf":3
   },
   "count":3
}';

$data = json_decode($json);

SELECT id FROM table WHERE pdf = $data['ext']['pdf'];
$where = '';
foreach ($data['ext'] as $ext => $value)
{
    $where .= ' ' . $ext . ' = ' . $value . ' OR';
}

$where = rtrim($where, 'OR');

$query = 'SELECT id FROM table WHERE] . $where;

将json解码到数组是没有必要的,但这只是我的方法。

json字符串是数据库或用户输入中的一个值,您想使用它在数据库中查找非json数据吗?实际上,有几种关系数据库系统支持访问json数据结构。MySQL将在5.7发布时成为其中之一。我不知道。然而,我认为情况并非如此,我担心在这种情况下的表现。事实上,对关系数据库使用常规数据结构应该总是更好的