2016-12-27 4 views
0

次のクエリは、変数$ whereEmailまたは変数$ whereNotEmailまたはその両方が空の場合は行を選択しません。変数$ whereEmailと$ whereNotEmailで

$whereEmail = "'[email protected]','[email protected]'"; 
$whereNotEmail = "'[email protected]','[email protected]'"; 
$result = $mSearch->dao->query(sprintf(' 
SELECT * FROM table 
WHERE email IN (%s) 
AND email NOT IN (%s) 
', $whereEmail, $whereNotEmail)); 

電子メールアドレスは、それらが空またはnullのままにされているいくつかのケースでは、PHPの関数を使用して保存されます。

変数$ whereEmailと$ whereNotEmailが両方とも空の場合、クエリはテーブルからすべての行を選択する必要があります。

同様に、変数$ whereEmailが空の場合、クエリは、電子メールアドレスが変数$ whereNotEmailにあるものを除き、テーブル内のすべての行を選択する必要があります。

同様に、変数$ whereNotEmailが空の場合、クエリは電子メールアドレスが変数$ whereEmailにあるすべての行を選択する必要があります。

答えて

0

//あなたは空ではないwhereEmail条件を設定する必要がとwhereNotEmailがうまくいけば、この作品

$whereEmail = "'[email protected]','[email protected]'"; 
$whereNotEmail = "'[email protected]','[email protected]'"; 
if($whereEmail != ''){ 
$result = $mSearch->dao->query(sprintf(' 
SELECT * FROM table 
WHERE email IN (%s) 
', $whereEmail)); 
}else{ 
$result = $mSearch->dao->query(sprintf(' 
SELECT * FROM table 
WHERE email NOT IN (%s) 
', $whereNotEmail)); 
} 
0

変数$ whereEmailとの両方の場合、私は期待して$ whereNotEmail 空のクエリが選択する必要があるすべての行からは、テーブル。

いいえ、クエリはSQLの言語構造を理解していますので、あなたはそれに応じてチェックして実行する必要があります。もし私があなただったら、リストが空であるかどうかを検証します。空の場合は、確認メッセージがポップアップされ、おそらくそれ以外の場合はクエリに渡されます。 (OR)リストのいずれかが空の場合、クエリからその条件を放棄することもできます。

+0

何http://stackoverflow.com/questionsについて/ 19357990/sql-select-all-if-parameter-null-else-return-specfic-itemは役に立ちますか? – Syed

+0

@Syed、それはSQLParameterをチェックしているので、PHP変数ではありません。違いを理解していますか? – Rahul

+0

いいえ、PHP変数をSQLパラメータに変換できますか? – Syed

0

私が正しく理解していれば次のアプローチを試みることができます。これらの電子メールの配列が空でない場合はすべての行を選択するクエリの構築を開始し、条件を追加

$whereEmail = array('[email protected]','[email protected]'); 
    $whereNotEmail = array('[email protected]','[email protected]'); 

    $query = 'SELECT * FROM `table` WHERE 1'; 
    if(!empty($whereEmail)) { 
      $validEmailsString = implode('","', $whereEmail); 
      $query .= ' AND email IN ("'.$validEmailsString.'")'; 
    } 

    if (!empty($whereNotEmail)) { 
      $invalidEmailsString = implode('","', $whereNotEmail); 
      $query .= ' AND email NOT IN ("'.$invalidEmailsString.'")'; 
    } 

    print $query; 

    $result = $mSearch->dao->query($query); 
関連する問題