Laravel:使用IN()函数的参数化查询仅在匹配中返回

时间:2014-05-24 00:07:17

标签: php mysql laravel-4

我正在运行laravel数据库查询:

 $relatedUsers = DB::select("Select Distinct user_id FROM customerLinks WHERE customer_id IN (?) ", array($currentUserCustomerLinks_csv) );

变量$currentUserCustomerLinks_csv包含我正在寻找的特定customer_ids的csv字符串。

当我在laravel中运行此查询时,对于与user_id字符串中的第一个值匹配的记录,仅返回$currentUserCustomerLinks_csvIN()。 csv中的所有其他值都将被忽略。

当我直接在我的mysql数据库中运行相同的查询时,我得到了完整的id列表。

在{{1}}函数中使用时,将csv字符串传递到数据库外观是否有问题?我没有看到在文档中执行类似查询的正确方法的任何示例。

1 个答案:

答案 0 :(得分:0)

  

变量$currentUserCustomerLinks_csv包含我正在寻找的特定customer_id的csv字符串。

使用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 ) );

请参阅