繁体   English   中英

PHP:使用IF语句生成SQL difficulites

[英]PHP: Generating SQL with an IF Statement difficulites

我在使用IF语句“选择”运行某些MySQL代码时遇到问题。 这是我的代码:

if ($numRows == 0 && count($terms) == 3) {
    $query2 .= " AND ( i.ING = '" . join("' OR i.ING = '", $terms) . "')". $queryType ." GROUP BY r.recipeID
    HAVING COUNT(DISTINCT i.ING ) = 2)";
    $termCount = 2;

}

if ($numRows == 0 && $termCount == 2) {
    $query2 .= " AND ( i.ING = '" . join("' OR i.ING = '", $terms) . "')". $queryType ." GROUP BY r.recipeID
HAVING COUNT(DISTINCT i.ING ) = 1)";

这输出:

    AND ( i.ING = 'wonton wrappers' OR i.ING = 'grape jelly' OR i.ING = 'lard') GROUP BY r.recipeID HAVING COUNT(DISTINCT i.ING ) = 2) 
AND ( i.ING = 'wonton wrappers' OR i.ING = 'grape jelly' OR i.ING = 'lard') GROUP BY r.recipeID HAVING COUNT(DISTINCT i.ING ) = 1)

但是,我只想让第二行成为我要使用的查询的一部分; 但因为第一个if语句总是如此,它也会输出该行。

所以基于这两个陈述我想得到的结果是:

AND ( i.ING = 'wonton wrappers' OR i.ING = 'grape jelly' OR i.ING = 'lard') GROUP BY r.recipeID HAVING COUNT(DISTINCT i.ING ) = 1)

这可能是我一直在看它太久的情况,并且无法注意到它是否是我忽略的一些最简单的事情。

有任何想法吗?

谢谢。

假设这是唯一受影响的代码,我认为最好的办法就是用elseif ($numRows == 0 && $termCount == 2)替换if ($numRows == 0 && $termCount == 2) elseif ($numRows == 0 && $termCount == 2) (基本上,将其作为排除欺骗可能性的其他if子句)

我建议像这样拆分逻辑:

if ($numRows == 0) {
  $query2 .= " AND ( i.ING = '" . join("' OR i.ING = '", $terms) . "')$queryType GROUP BY r.recipeID";

  $query2 .= " HAVING COUNT(DISTINCT i.ING) = " . (count($terms) == 3 ? 2 : 1);
}

利用你的分支基本相同的事实。

在您的第一个IF声明中; 如果它为TRUE(并输入该语句),则将$ termCount设置为2.第二个IF语句依赖于$ termCount == 2.因此,如果$ numRows为0,则两个语句将始终为true。 找到另一种触发第二个IF语句的方法; 或者只是从第一个IF语句中删除$ termCount = 2

使用If else代替并形成您的语句,以便查询仅在逻辑上应该分配给$ query。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM