Laravel DB 运行 一次两个查询 (SELECT/UPDATE)
Laravel DB run two queries at once (SELECT/UPDATE)
我有一个 table,它将一些记录存储为 JSON。我正在尝试增加 JSON 列中键的数值。下面是我在 Laravel 中使用 DB
外观执行的查询。
DB::connection()
->select("
SELECT CAST(JSON_EXTRACT(consumed, '$.max_users') AS INT) INTO @tmp
FROM subscriptions
WHERE `id` = '2';
UPDATE subscriptions
SET consumed = JSON_SET(consumed, '$.max_users', @tmp+1)
WHERE `id` = '2';
");
它在 PhpMyAdmin 中工作得很好,但是当试图从 Laravel 执行它时它抛出一个异常,即 SQL 语法不正确(哪里不正确?)。
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE subscriptions SET consumed = JSON_SET(consumed, '$.max_users', ' at line 5 (SQL: SELECT CAST(JSON_EXTRACT(consumed, '$.max_users') AS INT) INTO @tmp FROM subscriptions WHERE
id= '2'; UPDATE subscriptions SET consumed = JSON_SET(consumed, '$.max_users', @tmp+1) WHERE
id= '2'; )
我怀疑 select()
不允许同时 运行 两个不同的查询。但是在这种特殊情况下,我需要它们以便使用 @tmp
变量。我可以检索第一个查询的值并使用 PHP 将其传递给第二个查询,但是为了论证,如何 运行 在 [=31= 中一次选择两个 DB
]?
您可以使用单个更新查询来增加此值:
UPDATE subscriptions
SET consumed = JSON_SET(consumed, '$.max_users', CAST(JSON_EXTRACT(consumed, '$.max_users') AS INT) + 1)
WHERE `id` = '2';
我有一个 table,它将一些记录存储为 JSON。我正在尝试增加 JSON 列中键的数值。下面是我在 Laravel 中使用 DB
外观执行的查询。
DB::connection()
->select("
SELECT CAST(JSON_EXTRACT(consumed, '$.max_users') AS INT) INTO @tmp
FROM subscriptions
WHERE `id` = '2';
UPDATE subscriptions
SET consumed = JSON_SET(consumed, '$.max_users', @tmp+1)
WHERE `id` = '2';
");
它在 PhpMyAdmin 中工作得很好,但是当试图从 Laravel 执行它时它抛出一个异常,即 SQL 语法不正确(哪里不正确?)。
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE subscriptions SET consumed = JSON_SET(consumed, '$.max_users', ' at line 5 (SQL: SELECT CAST(JSON_EXTRACT(consumed, '$.max_users') AS INT) INTO @tmp FROM subscriptions WHERE
id= '2'; UPDATE subscriptions SET consumed = JSON_SET(consumed, '$.max_users', @tmp+1) WHERE
id= '2'; )
我怀疑 select()
不允许同时 运行 两个不同的查询。但是在这种特殊情况下,我需要它们以便使用 @tmp
变量。我可以检索第一个查询的值并使用 PHP 将其传递给第二个查询,但是为了论证,如何 运行 在 [=31= 中一次选择两个 DB
]?
您可以使用单个更新查询来增加此值:
UPDATE subscriptions
SET consumed = JSON_SET(consumed, '$.max_users', CAST(JSON_EXTRACT(consumed, '$.max_users') AS INT) + 1)
WHERE `id` = '2';