我如何从数组中的数据库 WHERE 制作 select
How I can make select from database WHRE in Array
我需要进行包含多个 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);
}
但结果,我得到一个错误:
message: "Bind value type ARRAY for parameter 1 is not supported"
我使用 tarantool
数据库。有什么想法吗?
SQL 现在不支持数组,因此您不能绑定数组类型的值(正是错误消息所说的)。您可以通过订阅相应的问题来跟踪支持此功能的进度:https://github.com/tarantool/tarantool/issues/4762
试试这个
$messages = $request->input('messages');
$messages = implode(',',$messages);
然后是你的代码
首先你的语法不正确,应该是
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);
我需要进行包含多个 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);
}
但结果,我得到一个错误:
message: "Bind value type ARRAY for parameter 1 is not supported"
我使用 tarantool
数据库。有什么想法吗?
SQL 现在不支持数组,因此您不能绑定数组类型的值(正是错误消息所说的)。您可以通过订阅相应的问题来跟踪支持此功能的进度:https://github.com/tarantool/tarantool/issues/4762
试试这个
$messages = $request->input('messages');
$messages = implode(',',$messages);
然后是你的代码
首先你的语法不正确,应该是
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);