php - 如何从 Array 中的数据库 WHRE 中进行选择
问题描述
我需要进行一个包含多个WHERE
条件的数据库查询。
问题是我无法正确地将$messages数组传递给请求。
public function Controller(Request $request)
{
$firstDate = $request->input('start');
$secondDate = $request->input('end');
$messages = $request->input('messages');
$data = $this->client->executeQuery( "SELECT sum('count') as 'var', 'firstname', 'surname' FROM 'table' WHERE 'surname' IN (?) AND 'time' BETWEEN ? AND ? group by 'surname' ORDER BY 'var' desc limit 10",
[$messages, $startDate, $endDate]);
$data = $data ->getData();
return response()->json($data);
}
但结果,我得到了一个错误:
消息:“不支持参数 1 的绑定值类型数组”
我使用tarantool
数据库。有任何想法吗?
解决方案
首先,你的语法不正确,应该是
executeQuery('...', $messages, $startDate, $endDate);
代替
executeQuery('...', [$messages, $startDate, $endDate]);
(请注意[]
您的版本中的冗余)。
其次,如果我正确理解您的问题,您需要展开$messages
数组并将每个值作为单独的参数传递给executeQuery()
. 此外,您需要动态构造 SQL 语句,其中包含与数组大小一样多IN()
的$message
占位符。像这样的东西:
$placeholders = rtrim(str_repeat('?,', count($messages)), ',');
$params = $messages;
$params[] = $startDate;
$params[] = $endDate;
$sql = "... IN ($placeholders) AND 'time' BETWEEN ? AND ? ...";
$result = $this->client->executeQuery($sql, ...$params);
推荐阅读
- mongodb - 如何将字段的值聚合到数组中?
- javascript - JavaScript如何使用数组将结果附加到api
- python - 根据更快速的应用当前百分比显示 QProgressDialog
- c# - 自定义纸张大小在 Crystal Report C# 中打印小内容
- sql - 从 SQL 内容中提取文本的更好方法是什么?
- java - 如何处理 JSOUP(版本 1.12.1)异常 java.io.IOException:尝试加载 URL 时发生了太多重定向
- coq - 在 Software Foundations Trie 模块中,is_trie 的一个好的实现是什么?
- python - 从(稀疏)JSON 获取可预测的 Pandas DataFrame
- sql - 如何通过计算日期的天数来聚合数据?
- android - 是否可以将省略号与 RNPickerSelect 一起使用:react-native-picker-select