我正在运行 Laravel 数据库查询:
$relatedUsers = DB::select("Select Distinct user_id FROM customerLinks WHERE customer_id IN (?) ", array($currentUserCustomerLinks_csv) );
变量 $currentUserCustomerLinks_csv
保存我正在查找的特定 customer_ids 的 csv 字符串。
当我在 laravel 中运行此查询时,仅返回与 $currentUserCustomerLinks_csv
字符串中第一个值匹配的记录的 user_id
。 csv 中的所有其他值都将被忽略。
当我直接在 mysql 数据库中运行相同的查询时,我得到了完整的 id 列表。
在 IN()
函数中使用时,将 csv 字符串传递到数据库外观是否有问题?我在文档中没有看到任何执行类似查询的正确方法的示例。
最佳答案
The variable
$currentUserCustomerLinks_csv
holds a csv string of the specificcustomer_id
s I'm looking for.
使用 IN
不会在 csv
输入上给出正确的结果。
FIND_IN_SET
可用于此类输入值。
返回的任何正 int
都表示找到了匹配项。
示例:
mysql> select FIND_IN_SET( 'in', 'Rav,in,der' ) found_indx_1
-> , FIND_IN_SET( 'no', 'Rav,in,der' ) found_indx_2;
+--------------+--------------+
| found_indx_1 | found_indx_2 |
+--------------+--------------+
| 2 | 0 |
+--------------+--------------+
更改部分代码如下:
$sql = "select distinct user_id from customerLinks
where FIND_IN_SET ( customer_id, ? ) > 0";
$relatedUsers = DB::select( $sql, array( $currentUserCustomerLinks_csv ) );
引用:
- FIND_IN_SET( str, strlist )
- 返回第一个参数在第二个参数中的索引位置 论点
关于php - 拉拉维尔 : Parameterized query with IN() function only returns first in match,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23839972/