MySQL查询,WHERE IN和日期BETWEEN?和?

时间:2018-03-04 01:32:13

标签: php mysql sql

我的查询可以解决,直到我尝试通过添加日期范围来限制它 使用内爆函数的clienti in效果很好。但我无法弄清楚如何在这里添加日期范围限制。

每次添加

STR_TO_DATE(date, \'%m/%d/%Y\') BETWEEN ? AND ?

SELECT invid, packid, clientid, date_range_start, date_range_end, value 
FROM inv_packs 
WHERE clientid IN (' . implode(',', $in) . ')

它破了

我一直在试图发现这两个被用在一起作为一个例子,并且一直在来回尝试不同的事情来使这个工作,但没有运气,任何帮助都非常感谢。

这里是查询的完整简化代码:

$l = count($uniqueIds);
$types = 'ss';
$types .= str_repeat('i', $l);

$num_of_invoices = count($invoice_table_data);
$inv_pack_count = 0;

$in = array_fill(0, count($uniqueIds), '?');

$query_inv_packs_for_date_range = 'SELECT invid, packid, clientid, date_range_start, date_range_end, value FROM inv_packs WHERE STR_TO_DATE(date, \'%m/%d/%Y\') BETWEEN ? AND ? AND clientid IN (' . implode(',', $in) . ')';

if($stmt2 = mysqli_prepare($connection, $query_inv_packs_for_date_range)){
      mysqli_stmt_bind_param($stmt2, $types, $filter_min_date, $filter_max_date, ...$uniqueIds);
      mysqli_stmt_execute($stmt2);
      mysqli_stmt_bind_result($stmt2, $invoice_id, $pack_id, $client_id_from_inv_pack_table, $date_range_start, $date_range_end, $value);

      while(mysqli_stmt_fetch($stmt2)){
           $invoice_packs_table_data[$inv_pack_count]['date_range_start'] = $date_range_start;
           $inv_pack_count++;

           echo " " . $date_range_start;

       }
       print_r($invoice_packs_table_data);
       $stmt2->close();
}

1 个答案:

答案 0 :(得分:0)

我的简单变量错误,但这个MySQL查询的语法是正确的。 希望这里有一些表情符号让我的眼睛回来。