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

问题描述 投票:0回答:1

我的查询可以解决,直到我尝试通过添加一个日期范围来限制它,其中clientid in implode函数运行良好。但我无法弄清楚如何在这里添加日期范围限制。

我每次添加

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();
}
php mysql sql
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.