我如何从数组中的数据库 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);