0

我在使用 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)

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

有任何想法吗?

谢谢你。

4

4 回答 4

1

假设这是唯一受影响的代码,我认为您最好的选择是简单地替换if ($numRows == 0 && $termCount == 2)elseif ($numRows == 0 && $termCount == 2). (基本上,将其设置为 else if 子句以排除欺骗的可能性)

于 2013-04-16T12:35:24.667 回答
1

我建议像这样拆分逻辑:

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);
}

利用您的分支机构基本相同的事实。

于 2013-04-16T12:42:14.267 回答
0

在您的第一个 IF 语句中;如果它为 TRUE(并且您输入了该语句),则您将 $termCount 设置为 2。第二个 IF 语句取决于 $termCount == 2。所以现在如果 $numRows 为 0,那么两个语句将始终为 true。寻找不同的方式来触发第二个 IF 语句;或者只是从第一个 IF 语句中删除 $termCount = 2

于 2013-04-16T12:34:00.720 回答
0

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

于 2013-04-16T12:37:16.963 回答