【问题标题】:Can I ignore a where clause in another sql query我可以忽略另一个 sql 查询中的 where 子句吗
【发布时间】:2014-05-07 14:29:49
【问题描述】:

我想通过在另一个变量中设置需要忽略where 子句的sql 来忽略where 子句。

但是当我尝试运行它时,什么都没有显示。

当我删除 sql 变量 "$test" 并在 $requete 中设置连接时。然后它会起作用,但不会忽略 where 子句:

<?php
// List of events
 $json = array();
 // Query that retrieves events

 $requete = "  SELECT distinct `evenementontvanger`.`idEvent`,`evenementontvanger`.`idProject`,`evenementontvanger`.`idKlant`,
`evenement`.`id`,`evenement`.`title`,`evenement`.`start`,`evenement`.`startdate`,`evenement`.`starttime`,
 `evenement`.`end`,`evenement`.`enddate`,`evenement`.`endtime`,`evenement`.`description`,`evenement`.`color` 
 FROM `evenement` LEFT JOIN `evenementontvanger` ON `evenementontvanger`.`idEvent` = `evenement`.`id` WHERE `idEvent`=`evenement`.`id`";

 $test ="LEFT JOIN `Werknemer` ON `Werknemer`.`idWerknemer`=`evenementontvanger`.`idWerknemer`";

 // connection to the database
 try {
 $bdd = new PDO('mysql:host=localhost;dbname=blackboks-calendar', 'calendar-boks', '19xantia');
 } catch(Exception $e) {
  exit('Unable to connect to database.');
 }
 // Execute the query
 $resultat = $bdd->query($requete,$test) or die(print_r($bdd->errorInfo()));

 // sending the encoded result to success page
 echo json_encode($resultat->fetchAll(PDO::FETCH_ASSOC));

?>

【问题讨论】:

  • 您从哪里得到将查询部分添加为 query() 参数的想法?
  • 你的意思是 query($requete,$test) 我认为可以通过这个来完成,但我不知道我是否正确
  • 在阅读 query() 手册页时,你有没有得到任何证明这个想法的证据?
  • 有条件要忽略where子句条件吗?
  • 因为我想为用户会话 ID 设置 where 子句。有些查询需要被忽略。

标签: php mysql sql sql-server pdo


【解决方案1】:
<?php
$foo = true;

// Query that retrieves events
if ( $foo ) {
    $auxJoin ="
        LEFT JOIN
            `Werknemer`
        ON
            `Werknemer`.`idWerknemer`=`evenementontvanger`.`idWerknemer`
    ";
}
else {
    $auxJoin = '';
}

$requete = "
    SELECT
        distinct `evenementontvanger`.`idEvent`,`evenementontvanger`.`idProject`,`evenementontvanger`.`idKlant`,
        `evenement`.`id`,`evenement`.`title`,`evenement`.`start`,`evenement`.`startdate`,`evenement`.`starttime`,
        `evenement`.`end`,`evenement`.`enddate`,`evenement`.`endtime`,`evenement`.`description`,`evenement`.`color` 
    FROM
        `evenement`
    LEFT JOIN
        `evenementontvanger`
    ON
        `evenementontvanger`.`idEvent` = `evenement`.`id`
    $auxJoin
    WHERE
        `idEvent`=`evenement`.`id`
";



// connection to the database
try {
    $bdd = new PDO('mysql:host=localhost;dbname=blackboks-calendar', 'calendar-boks', '19xantia');
    $resultat = $bdd->query($requete,$test) or die(print_r($bdd->errorInfo()));
    $data = $resultat->fetchAll(PDO::FETCH_ASSOC)
}
catch(Exception $e) {
    $data = array('error'=>'Unable to connect to database.');
}

// sending the encoded result to success page
echo json_encode($data);

【讨论】:

    【解决方案2】:
    $test = "LEFT JOIN Werknemer W ON W.idWerknemer = et.idWerknemer";
    $sql = "SELECT ... LEFT JOIN ... FROM  ON idEvent = e.id $test WHERE ...";
    

    现在您可以动态添加或删除该部分

    【讨论】:

    • 我需要忽略 $test 连接中的 where 子句当我像你的回答那样做时,“LEFT JOIN Werknemer..”部分不会忽略 where 子句
    • 你总是可以让 $test 为空的,你知道的
    • 是的,但我也需要在查询中运行 $test。
    • 您也可以随时将其填满。当你的班级在学校学习条件语句时,你生病了吗?
    • 在另一个答案中为您提供了完整的代码。如果你不能采用它——那么你似乎又要注意你的课程了。
    猜你喜欢
    • 2012-09-18
    • 2022-01-21
    • 2015-08-15
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2021-01-07
    • 2015-09-16
    • 1970-01-01
    相关资源
    最近更新 更多