我的查询可以解决,直到我尝试通过添加日期范围来限制它 使用内爆函数的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();
}
答案 0 :(得分:0)
我的简单变量错误,但这个MySQL查询的语法是正确的。 希望这里有一些表情符号让我的眼睛回来。