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)

ただし、2行目を使用するクエリの一部にしたいだけです。ただし、最初の if ステートメントも常に true であるため、その行も出力されます。

したがって、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)

あまりにも長い間見てきて、見落としている最も単純なものであるかどうかに気付かない場合があります。

何か案は?

ありがとうございました。

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 に設定しています。2 番目の IF ステートメントは $termCount == 2 に依存します。したがって、現在 $numRows が 0 の場合、両方のステートメントが常に true になります。2 番目の IF ステートメントをトリガーする別の方法を見つけます。または、最初の IF ステートメントから $termCount = 2 を削除するだけです

于 2013-04-16T12:34:00.720 に答える
0

代わりに If else を使用し、クエリが論理的に必要な $query にのみ割り当てられるようにステートメントを作成します。

于 2013-04-16T12:37:16.963 に答える