因此,我正在查找绑定(bind)到电子邮件和 account_id 的数据,如果没有结果,则仅查找 account_id。下面的代码可以正确执行此操作。
SELECT SQL_CALC_FOUND_ROWS account_id, email, latitude, longitude
FROM call_module_location
WHERE email = $email AND `account_id` = $account_id
UNION ALL
SELECT account_id, email, latitude, longitude
FROM call_module_location
WHERE FOUND_ROWS() = 0 AND `account_id` = $account_id
但是我需要处理3种情况,如果也找不到id数据,在这种情况下我应该通过电子邮件获取数据:
SELECT SQL_CALC_FOUND_ROWS account_id, email, latitude, longitude
FROM call_module_location
WHERE email = $email AND `account_id` = $account_id
UNION ALL
SELECT account_id, email, latitude, longitude
FROM call_module_location
WHERE FOUND_ROWS() = 0 AND `account_id` = $account_id
UNION ALL
SELECT account_id, email, latitude, longitude
FROM call_module_location
WHERE FOUND_ROWS() = 0 AND email = $email";
但是它不起作用。有什么解决办法吗?
最佳答案
SELECT account_id, email, latitude, longitude
FROM (SELECT 1 priority, account_id, email, latitude, longitude
FROM call_module_location
WHERE email = $email AND `account_id` = $account_id
UNION
SELECT 2 priority, account_id, email, latitude, longitude
FROM call_module_location
WHERE `account_id` = $account_id
UNION
SELECT 3 priority, account_id, email, latitude, longitude
FROM call_module_location
WHERE email = $email) u
ORDER BY priority
LIMIT 1
如果您将 SQL_CALC_FOUND_ROWS
添加到 UNION
中的第二个查询,您的原始查询也可能会起作用。
关于mysql - 使用 SQL_CALC_FOUND_ROWS 和 UNION ALL 的 Select 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21018054/