【问题标题】:MYSQL SELECT and JSON_ENCODEMYSQL SELECT 和 JSON_ENCODE
【发布时间】:2011-06-08 03:26:37
【问题描述】:

我需要从 mysql 的 json_encodED 数组中选择一个键..

SELECT * FROM json_field_table WHERE {var from JSON encoded array} = {expected value}

什么的.. 我该怎么做?

PS.: 英语不好,我知道..

【问题讨论】:

  • 无论您的语言知识如何,您都应该真的、真的花更多的时间来提出一个实际的问题。太不具体了,无法回答。
  • 嗯,我认为这是一个可以回答的问题。但仅限于:no。如果您的数据库表中有 JSON 编码结构,您首先必须将其传输到应用程序以解包并比较该数组的条目。 MySQL 没有提供处理 JSON 的内置函数(它为 XML 提供),而且还不太可能有人为此设计了存储过程。 (好吧,字符串搜索是一种解决方法。)
  • @hakre 抱歉,我m Brasiliam and dont 知道如何创建问题.. 对我来说很复杂。
  • @mario 从数据库中选择所有然后解码 json 字段,然后检查?
  • @Gabriel:是的,那将是*正确*的方法。但由于开销,这显然不是一个*可行的*解决方案。

标签: php mysql json


【解决方案1】:

您必须使用子字符串匹配。 MySQL 没有任何东西可以处理 JSON 数据,而是像处理任何其他随机文本一样处理它。

SELECT ... WHERE the_json_field LIKE '%"var":"value"%';

【讨论】:

    【解决方案2】:

    好吧,加布里埃尔,尽管你的问题的性质很重要。我想,您的问题可能是,您需要读取 JSON 值并基于该值,您需要从表中检索记录集。如果是这种情况,这是您的解决方案。

    // A sample json string
    $json = '{ "field1": "value1", "field2": "value2" }'; 
    
    // Here we will convert the json string into readable assocative array
    $json_array = json_decode($json,true); 
    
    //Next we will use it on a query
    $query = "SELECT * json_field_table WHERE `".$json_array['field1']."` = 'Some Value' ";
    
    //Execute the query
    $result = mysql_query($query);
    

    【讨论】:

    • 您不能检索该行,然后稍后再检查它。您正在尝试做的事情将创建一个非常低效的解决方案。您正在尝试做的事情可能有更好的方法。但是,如果你坚持按照自己的想法去做,那么最好采用@Marc B 的解决方案。
    【解决方案3】:

    使用数字(整数)可以过滤掉值,使用字母数字字符串更复杂,因为存储的值是“jsonencoded”

    查看我对17955206的回答

    【讨论】:

      猜你喜欢
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 2013-11-20
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多