【问题标题】:Mysql WHERE field containing JSON variableMysql WHERE 字段包含 JSON 变量
【发布时间】:2013-02-21 12:07:12
【问题描述】:

我有一个数据库,其中包含一个归档 myfield 包含 json 字符串:["2","4","1","6"] OR ["1"] 。我想为这个文件做一个过滤器,并想用以下方式查询它:

SELECT id FROM table_name WHERE myfield = '5' -> 这个返回不能回显 id 因为["2","4","1","6"] 没有值 5。

SELECT id FROM table_name WHERE myfield = '1' -> return 可以回显 id-> 因为 -> 在归档 myfield 的 json 字符串中的值为 1。

如何解决?我该怎么办?

我试过了,但它对我不起作用:

SELECT id FROM table_name WHERE myfield = '1'

【问题讨论】:

    标签: mysql database json codeigniter


    【解决方案1】:

    例如,要检查id=1,您可以这样做

    SELECT 1 as id
    FROM table_name 
    WHERE find_in_set('1', replace(myfield, '"', '')) > 0
    

    你可以在你的代码中这样使用它

    $this->db->query("SELECT 1 as id 
                      FROM table_name 
                      WHERE find_in_set('1', replace(myfield, '\"', '')) > 0");
    

    【讨论】:

    • 我在 codeigniter 上使用它为:$row = $this->db->query('SELECT id FROM table_name WHERE find_in_set(5, replace(myfield, '"', '')) > 0')->row(); 并回显结果为:echo $row->fieldname; 并收到此错误:Parse error: syntax error, unexpected '1' (T_LNUMBER) 我该怎么办?
    • 我不知道。我在您的查询中没有看到 1。您的表中有id 列吗?
    • 顺便说一句,你应该用"而不是'分隔你的字符串:$row = $this->db->query("SELECT...
    • 如我所说,用" 分隔您的查询。如果不这样做,那么您将使用下一个 ' 结束查询
    • 我使用"它会干扰..., '"', ...并且有错误:Parse error: syntax error, unexpected '', '' (T_CONSTANT_ENCAPSED_STRING)????
    【解决方案2】:

    如果您搜索第一项或最后一项,@juergen 给出的解决方案将不起作用。为此,您还需要替换方括号。这对我有用

    SELECT * 
    FROM `tbl_tasks_weekly` 
    WHERE FIND_IN_SET('1', REPLACE( REPLACE( REPLACE(`myfield`,']','') ,  '[',''),'\"','')) 
    

    【讨论】:

      【解决方案3】:

      使用序列化和反序列化来保存或检索数据库字段中的数据。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-11
        • 2012-12-26
        • 1970-01-01
        • 2021-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        相关资源
        最近更新 更多