【问题标题】:if no results returned from first query then use second query如果第一个查询没有返回结果,则使用第二个查询
【发布时间】:2018-12-18 20:01:27
【问题描述】:

我正在制作一个系统,我需要检查电子邮件是否存在于第一个表或第二个表中。

    $results = mysqli_query($db,"SELECT * FROM table_1 WHERE email='$email'");
    if(count($results) == 0)
    {
        $results = mysqli_query($db,"SELECT * FROM table_2 WHERE email='$email'");
    }

我想做一个mysql,这样就不需要两个了。由于两个表结构不同UNION 没有给出正确的结果。有没有办法不用UNION or JOINS

我一直在尝试使用 UNION

SELECT * FROM ( SELECT *, 1 as preference FROM table_1 WHERE email = 'doc@demo.com' UNION SELECT *, 2 as preference FROM table_2 WHERE email = 'doc@demo.com' ) T ORDER BY preference LIMIT 1

但问题是,如果表 2 的情况满足,则考虑表 1 的字段并且所有值都不匹配

【问题讨论】:

  • 您的脚本对SQL Injection Attack 甚至if you are escaping inputs, its not safe! 都是开放的,在MYSQLI_PDO API 中使用prepared parameterized statements
  • @RiggsFolly 感谢您指出这一点。它是代码的重要组成部分。为了简化,我在这里以最简单的形式写了。我正在为这些使用 mysql 准备好的语句框架。
  • @ClaudiusDan 感谢您的回复。我已经检查了答案。它更像是两个表的合并,但在这里我想比较第一个查询是否返回空结果,然后运行第二个,因为两者都有不同的字段。除了一个是电子邮件之外,这就是我正在检查的地方
  • 您可以连接具有不同字段的表...所以是的,您可以执行单个请求...您能给我们完整的 sql 2 请求吗? ?为什么你在谈论表结构差异,因为你在电子邮件字段上搜索,所以我们不必打扰其他字段?

标签: php mysql


【解决方案1】:

我找到了自己问题的解决方案,所以只想分享它

SELECT * FROM (
  SELECT email,password,user_role, id as customer_id,id as user_id, 1 as preference 
    FROM table1 WHERE email = 'raj@demo.com'
   UNION 
  SELECT email,password,user_role, customer_id,id, 2 as preference 
    FROM table2 WHERE email = 'doc@demo.com' 
) T ORDER BY preference
LIMIT 1

【讨论】:

    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多