【问题标题】:MySQL: JOIN and Conditional StatementMySQL:JOIN 和条件语句
【发布时间】:2016-10-09 15:16:53
【问题描述】:

comeone 可以帮助我破译查询所需的正确代码逻辑吗?我只是找不到关于这个的解决方案,或者我的搜索查询只是模糊的。哈哈。

我在没问题之前进行了查询和思考,但我刚刚意识到这些不准确。以下是我尝试过的:

从一个搜索页面,例如我们有这个变量:

$variable = !empty($_POST["variable"]) ? $_POST['variable'] : "";

查询 1

SELECT
    ...
    ...
FROM table1
LEFT JOIN table2 ON table1.column_id = table2.column_id 
WHERE table2.column LIKE '%$variable%'

结果 1

  • 如果$variable 没有值,则仅显示具有来自table2 的相应数据的行。
  • 如果$variable 有值,则显示来自table2 的相应数据和匹配值的行。

查询 2

SELECT
    ...
    ...
FROM table1
LEFT JOIN table2 ON table1.column_id = table2.column_id 
     AND table2.column LIKE '%$variable%'

结果 2

  • 如果$variable 没有值,则显示所有行。
  • 如果$variable 有值,所有行仍会显示。

期望的结果

  • 如果$variable 没有值,将显示所有行。
  • 如果$variable 有一个值,则具有来自table2 的相应数据的行 并显示匹配的值。

我已经尝试过使用IFCASELEFT OUTER JOIN (我在某处找到的东西),但仍然没有运气。我在这里忘记了什么吗?还是我做错了(这是事实)

我有另一种方法,那就是在 PHP 中使用条件语句(这将是我的最后一个选择),但如果只有 MySQL 可以做到这一点,那就太好了。

【问题讨论】:

    标签: php mysql join logic conditional


    【解决方案1】:

    你可以使用类似的东西:

    SELECT
        ...
        ...
    FROM table1
    LEFT JOIN table2 ON table1.column_id = table2.column_id 
         AND (table2.column LIKE '%$variable%' OR $variable = '' OR $variable IS NULL)
    

    如果$variableNULL 或为空,则查询将返回所有 条记录。否则,只返回匹配的记录。

    【讨论】:

    • 我已经尝试过了,但是无论$variable是否有值,它都会显示所有行。
    【解决方案2】:

    join需要检查条件,必须使用inner join

    $sql = "SELECT
    ...
    ...FROM table1";
    
    if(!empty($variable)){
    $sql = $sql." INNER JOIN table2 ON table1.column_id = table2.column_id WHERE table2.column LIKE '%$variable%'";
    }
    

    【讨论】:

    • 我有一个类似的替代方案,使用 PHP 的条件语句(我将使用它作为最后一个选项)但如果有可能纯粹在 MySQL 中执行此操作,那么我将使用它。
    【解决方案3】:
        SELECT CP.*,CT.* FROM `ChecklistTasks` AS CT LEFT JOIN ChecklistPoints AS CP 
        ON CT.`pkTID` = CP.`fkTID` AND CP.`CheckPointName` LIKE '%var%'
    

        SELECT CP.*,CT.* FROM `ChecklistTasks` AS CT LEFT JOIN ChecklistPoints AS CP 
        ON CT.`pkTID` = CP.`fkTID` AND CP.`CheckPointName` LIKE '%%'
    

    到目前为止,您的查询是正确的..它正在处理正确的结果..您想要

    【讨论】:

      【解决方案4】:

      好的,我刚刚使用IF 子句再次尝试,并找出了我能想到的最简单的查询。 它现在给出了想要的结果,这是我的查询:

      SELECT
          ...
          ...
      FROM table1
      LEFT JOIN table2 ON table1.column_id = table2.column_id 
      WHERE IF('$variable' != '', table2.column = '$variable', 1 = 1)
      

      我成功地将IF() 子句放在了正确的位置。如果你们对此代码有想法或有比这更好的代码,请分享:)


      [附加]

      这是来自@ypercubeᵀᴹ 的answer,我喜欢它!

      SELECT
          ...
          ...
      FROM table1
      LEFT JOIN table2 ON table1.column_id = table2.column_id 
      WHERE table2.column = '$variable' OR '$variable' = ''
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-14
        • 2012-02-04
        • 2021-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        相关资源
        最近更新 更多