php - 检查 PHP mysql 查询字段中的逗号分隔值

标签 php mysql sql phpmyadmin

我在名为过滤器的表中有一个字段,它可以有逗号分隔值 1,2,3 或 3,1 或更多。我只需要选择与字段中的这些记录匹配的记录。假设有人发送 1, 3 并且它必须存在于过滤器字段中,即操作。

我正在使用 FIND_IN_SET 并且它对于单个值工作正常,假设有人发送 1 并且它正在获取正确的记录,但如果有人发送逗号分隔的 1,3 那么它会给出以下错误

Invalid query: Incorrect parameter count in the call to native function 'FIND_IN_SET'

对于单个记录,我正在使用以下查询,它工作正常。

SELECT shoptitle,
        logopic,
        complocality, 
        profileurl, 
        lat, 
        lng,
        mageuserid,
        compdesi,
        deliverymin,
        deleiveryprice,
        deleiverymethod,
        vendorphone,
        compcity,
        compstate,
        zipcode,
        showcompleteaddress,
        ( 3959 * acos( cos( radians('33.8352932') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-117.91450359999999') ) + sin( radians('33.8352932') ) * sin( radians( lat ) ) ) ) AS distance 
FROM userdata 
WHERE FIND_IN_SET (1,filter) 
HAVING distance < '10'   
ORDER BY distance

最佳答案

最好的解决方案是标准化数据库,删除逗号分隔的值列表。这些问题是很难检查多个值(正如您所发现的),但即使对于单个值,任何检查也不会使用索引,因此速度会很慢。

如果失败,您需要拆分列表进行检查,然后对每个列表使用 FIND_IN_SET 来检查它是否在字段中。

类似这样的:-

$some_values = "1,3";

$some_values_array = explode(',', $some_values);

$Some_checks = "FIND_IN_SET ('".implode("',filter) AND FIND_IN_SET ('", $some_values_array).")";

$sql = "SELECT shoptitle,
            logopic,
            complocality, 
            profileurl, 
            lat, 
            lng,
            mageuserid,
            compdesi,
            deliverymin,
            deleiveryprice,
            deleiverymethod,
            vendorphone,
            compcity,
            compstate,
            zipcode,
            showcompleteaddress,
            ( 3959 * acos( cos( radians('33.8352932') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('-117.91450359999999') ) + sin( radians('33.8352932') ) * sin( radians( lat ) ) ) ) AS distance 
    FROM userdata 
    WHERE $Some_checks
    HAVING distance < '10'   
    ORDER BY distance";

严格来说,可以在 SQL 中执行此操作,但它会非常糟糕且难以维护,而且速度也较慢。

关于php - 检查 PHP mysql 查询字段中的逗号分隔值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26840504/

相关文章:

php - 外部 CSS 链接在 codeIgniter 中不起作用

php - 使用PHP文件在服务器之间自动存储和发送JSON数据

mysql - 将结果限制为 n 个唯一的列值?

python - 如何检查字符串是否包含 Django ORM 查询中列表的任何一个值

php - 如何从PHP Web服务中的MySQL表中获取所有记录

php - Uncaught ReferenceError : JQuery

mysql - 检查是否存在多个关系的最有效方法

sql - 高读/写数据存储

mysql - 比较多个列值

php - 在Elasticsearch中处理必须/应该