gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:27:33 25 4
gpt4 key购买 nike

我在名为过滤器的表中有一个字段,它可以有逗号分隔值 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com