【问题标题】:How to put 2 SQL querys together?如何将 2 个 SQL 查询放在一起?
【发布时间】:2016-01-11 09:12:32
【问题描述】:

我正在尝试将 2 个 sql 查询放在一起以获取名称:

$query = "SELECT * FROM register WHERE name LIKE '" .$name ."'ORDER BY id DESC";

还有一个得到 $from 和 $to:

$sql = "SELECT * FROM register WHERE time BETWEEN ('$from') AND ('$to')";

您能否建议如何结合这两个查询来显示一个选择的名称以及从和到选择的名称以及只显示选择的名称的所有结果而没有从和到?

【问题讨论】:

  • 请修正你的标签,你可能不会同时使用mysqlsql-server
  • 你能提供一些样本记录和预期的输出吗?这将有助于我们为您提供帮助。
  • 找到答案:$query = "SELECT * FROM register WHERE name LIKE '" .$name ."' 和 ifnull(timestamp('$from'),time) 和 ifnull(timestamp( '$to'),time) ORDER BY id DESC";

标签: php mysql sql input


【解决方案1】:
SELECT * FROM register WHERE time BETWEEN @from AND @to
UNION
SELECT * FROM register WHERE name LIKE @name ORDER BY id DESC

【讨论】:

    【解决方案2】:

    这可以使用UNION 来完成,或者您也可以使用OR 条件:

    SELECT *
    FROM register
    WHERE name LIKE '" .$name ."'
        OR time BETWEEN ('$from') AND ('$to')
    ORDER BY id DESC;
    

    【讨论】:

    • 如果我只选择名字,我会得到只是名字的结果,这很好,但如果我为那个名字输入 from 和 to,我会得到 from 和 to 选择的所有名称?
    • @Jonas 没错。如果这不正确,请说明您的要求。
    • 抱歉,我要求显示所选名称的所有结果,而不是数据库中的所有名称?
    • @Jonas 请改写一下,或者更好的是,将测试数据和预期输出添加到您的问题中,因为您现在还不清楚您需要什么。
    • @Jonas 也许只是在我的查询中将OR 替换为AND
    【解决方案3】:
        SELECT * FROM register WHERE name LIKE '" .$name ."' 
              OR time BETWEEN ('$from') AND ('$to')
        ORDER BY id DESC
    

    【讨论】:

      【解决方案4】:

      您可以使用Union 合并两个查询的结果

      SELECT * FROM register WHERE name LIKE '" .$name ."'
      union all
      SELECT * FROM register WHERE time BETWEEN ('$from') AND ('$to')
      

      【讨论】:

      • 答案已更新。检查一次...谢谢@Evaldas Buinauskas
      【解决方案5】:

      你的问题不清楚,但仍然可以尝试这样的事情

      $query = "SELECT * FROM register WHERE name LIKE '" .$name ."'
      OR (time BETWEEN ('$from') AND ('$to')) ORDER BY id DESC";
      

      【讨论】:

      • 抱歉问题的哪一部分你不明白?我想从数据库中选择一个名称,该名称将显示名称的所有结果,如果我来自和到该名称,以及显示带有 from 和 to 的那个名称的结果?
      • 你需要 AND 而不是 OR 。你可以试试上面的查询吗?
      • 谢谢,但如果我添加 AND 如果只输入名称,我将得不到任何结果。但是如果我添加 from 和 to 会得到结果吗?和 OR 给我命名结果,如果我添加 from 和 to 我得到图片中的结果。
      【解决方案6】:

      这就是我所追求的,感谢我的 Oracle 程序员,你知道你是谁,我想分享一下:

      $query = "SELECT * FROM register WHERE name LIKE '" .$name ."' and time between ifnull(timestamp('$from'),time) and ifnull(timestamp('$to'),time) ORDER BY id DESC"; 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-16
        • 2022-06-10
        • 2023-02-08
        • 1970-01-01
        相关资源
        最近更新 更多