如何通过匹配(字符串到数组和数组到数组)从mysql存储和检索数组数据我在从mysql获取数据时遇到问题

Posted

技术标签:

【中文标题】如何通过匹配(字符串到数组和数组到数组)从mysql存储和检索数组数据我在从mysql获取数据时遇到问题【英文标题】:how to store and retrive array data from mysql by match (string to array AND array to array) i have problem in fetching data from MySQL 【发布时间】:2021-10-05 14:59:40 【问题描述】:

将 db 存储为逗号分隔的字符串,我想从逗号分隔的字符串中检索数据。

https://code.sololearn.com/wKW8F3caReUY/?ref=app

此代码是否正常工作,因为它没有向我显示所需的结果

//$userData['city'] = 27 //db中的城市保存为12,33,9,2,1,27,31

    //$userData['hobbies'] = 3,24
    //hobbies in db have values as 3,24,17,31

    // how to i match these records/arrays by my sql db records

    $SQL = "SELECT * FROM users_stats WHERE 
    type = '1'
    AND
    (
        ".in_array( $userData['city'] ,  explode(",", "'cities'") )."
        OR
        cities IN('all','pak')
    )
    AND
    (
        time = ".$currentTime." OR time = 'all'
    )
    AND
    (
        ".((array_intersect( explode(",",$userData['hobbies']) , explode(",", "'hobbies'")) != null)?1:0)."
    )
    ";

【问题讨论】:

我没有看到使用准备好的语句。 ***.com/questions/3653462/… 【参考方案1】:

您混淆了单独的环境。 php 有自己的环境。 数据库有自己的环境。

从sql获取数据的基本流程:build sql query text -> send to database server -> parse the sql text,execute sql query -> return data back to php

在你的 php 代码中

".in_array( $userData['city'] ,  explode(",", "'cities'") )."

你构建的sql,你想炸开数据库中的cities列,但是那个时候sql还没有执行,看来你想在数据库环境中执行php。explode是一个php函数,我想你知道,此时cities 只是一个字符串,而不是包含数据的数据库列。 php 执行后,字符串将解析为 (即false)。

对于解决方案,mysql中没有简单的操作数组的方法(其他数据库可能操作数组),所以简单的方法是将cities列返回给php,然后foreach过滤数据你想要的

【讨论】:

以上是关于如何通过匹配(字符串到数组和数组到数组)从mysql存储和检索数组数据我在从mysql获取数据时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

如何通过匹配 ObjectId 字段从嵌套数组中删除对象

Perl 中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?

通过删除字母匹配到字典里最长单词

Leetcode——通过删除字母匹配到字典里最长单词(子序列)

如何通过数组检查字符串是不是具有匹配的子字符串

将多维数组从mysql层次结构表填充到php