3

当向客户发送提醒时,我必须为客户列表更新任意数量的行。我可以通过 foreach 循环来实现这一点,但我确信必须有一种方法可以通过查询来做到这一点。

这是目前有效的

foreach($customer_id_arr as $c) mysqli_query($con,"UPDATE crm_customers SET customer_reminded=1 WHERE customer_id=$c");

我怎样才能在一个查询中做到这一点?

4

3 回答 3

5

您可以利用implode()这一点:

mysqli_query($con,"UPDATE crm_customers SET customer_reminded=1 WHERE customer_id IN (" . implode(",",$customer_id_arr) . ")";

值得一提的是,您很可能在不使用预准备语句的情况下对 SQL 注入持开放态度。

于 2019-03-27T21:48:44.033 回答
1

不是逃避数据的最佳方式,但您可以这样做:

mysqli_query($con,"UPDATE 
    crm_customers 
  SET 
    customer_reminded=1 
  WHERE customer_id IN (".implode(',', array_map(function($c){return $con->real_escape_string($c);a},$customer_id_arr)).")");
于 2019-03-27T21:51:06.713 回答
1

假设您需要更新客户 ID 的 1、2、3、4 和 5:

UPDATE crm_customers 
SET customer_reminded = 1 
WHERE customer_id IN (1, 2, 3, 4, 5)

您甚至可以在 IN 子句中使用子查询。假设您想在 customer_remitted==0 的所有记录上设置 customer_remitted=1。就像是:

UPDATE crm_customers SET customer_reminded = 1 
WHERE customer_id IN 
    (SELECT customer_id 
    FROM crm_customers 
    WHERE customer_reminded == 0)
于 2019-03-28T07:01:01.270 回答