PHP:使用IF语句生成SQL很困难
我在使用IF语句“选择”一些要运行的MySQL代码时遇到了问题。这是我的密码:PHP:使用IF语句生成SQL很困难,php,mysql,if-statement,mysqli,Php,Mysql,If Statement,Mysqli,我在使用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)"; $term
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语句也总是true,所以它也输出该行
因此,我想根据这两种说法得出的结果是:
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声明中;如果为真(并且输入该语句),则将$termCount设置为2。第二个IF语句依赖于$termCount==2。所以现在如果$numRows是0,那么这两条语句都将始终为真。找到另一种方法来触发第二个IF语句;或者简单地从第一个IF语句中删除$termCount=2假设这是唯一有效的代码,我认为最好的办法是简单地将
IF($numRows==0&&$termCount==2)
替换为elseif($numRows==0&$termCount==2)
。(基本上,将其设置为else-if子句以排除重复的可能性)使用if-else,并形成您的语句,使查询只在逻辑上应该分配给$query的地方进行分配。我建议如下拆分逻辑:
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
语句中,第一次使用count($terms)
,第二次使用$termcCount
,也许可以尝试将它们更改为相同的值?在分配$termCount=2时,很明显会得到这个输出
在第一个条件中,并在第二个条件中检查相同项,这将始终为真。为什么term_count
设置为2?这不是对您的问题的回答,但您可以将sql中的或部分简化为:输入('wonton wrappers'、'grape jelly'、'lard')