如何使用首选 where 子句获取行,但也有后备?

How to fetch rows with prefered where clause, but also with a fallback?

我有一个这样的查询(事务),用于从 table 中获取项目。我有一个 confirmed = '1' 的 where 子句,但是当没有找到带有该子句的行时,我想回退到忽略那个 where 子句。

如何在 MySQL 服务器中执行此操作?

START TRANSACTION;

SELECT @id := `id`,`item` 
FROM `queue_items` 
WHERE `processed_at` IS NULL AND `completed_at` IS NULL AND confirmed = '1' ORDER BY `id` ASC 
LIMIT 1
FOR UPDATE;

UPDATE `queue_items` SET `processed_at` = @processedAt, `worker_id` = @workerId WHERE `id` = @id;

COMMIT;

您可以使用条件排序:

SELECT @id := `id`, `item` 
FROM `queue_items` 
WHERE `processed_at` IS NULL AND `completed_at` IS NULL
ORDER BY (confirmed = 1) DESC, `id`
LIMIT 1