mysql - 使用 SQL_CALC_FOUND_ROWS 和 UNION ALL 的 Select 语句

标签 mysql

因此,我正在查找绑定(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/

相关文章:

mysql - 如何从 LOAD DATA LOCAL INFILE 查询中删除换行符?

mysql - 触发器内有多个插入/更新语句?

mysql - SQL 查询 "Find the article that has generated most income?"

php - mysqli_* 或 mysql_* 性能?

mysql - 错误代码: 1292 Truncated incorrect datetime value

mysql - SQL查询最近记录

mysql - 在催化剂中将多个项目添加到模型中

php - 按关键字搜索 SQL 查询

php - SQL count all 不在 php 中执行

php - 通过 Ajax 使用 PHP 在 MySQL 中插入和检索数据