1

複数のフィルターを使用してコンテンツをフェッチしたいのですが、現在は1つしかありません。例えば:

SELECT * FROM Table1 WHERE status = true AND category ='Camera' AND model ='Samsung' AND type ='New'

そのための配列を作成したいと思います。しかし、私はこれの初心者なので、リードを得ることができません。

function getAllRequests($filter){
if(empty($filter)){
    $addfilter = '';    
    }else{
    $addfilter = 'AND cat_id=' . $filter;
    }
}

$sql = 'SELECT * FROM Table1 WHERE status=true' . $filter;

どんな助けでもありがたいです。

4

5 に答える 5

1

これにより、ソリューションに近づくことができますがcat_id、クエリ内のを置き換えることはできません。これは間違いなく間違っています。ただし、配列構造なしでこれ以上のことを行うことは不可能です。

function getAllRequests($filter)
{
    $addfilter="";
    if(!empty($filter))
    {
        foreach($filter as $val)
        {
            $addfilter. = ' AND cat_id=' . $val .'\'';
        }
    }
    return $addFilter;
}

$myFilters=getAllRequests($filter);
$sql = 'SELECT * FROM Table1 WHERE status=true' . $myFilters;

一方、アレイが次のように構造化されている場合:

array{ category => camera, model => samsung); // etc

次を使用できます。

function getAllRequests($filter)
{
    $addfilter="";
    if(!empty($filter))
    {
        foreach($filter as $key => $val)
        {
            $addfilter. = " AND `$key` = '$val'";
        }
    }
    return $addFilter;
}

$myFilters=getAllRequests($filter);
$sql = 'SELECT * FROM Table1 WHERE status=true' . $myFilters;

編集:次の方法ですべてのフィルターをループできます。

function getAllRequests()
{
    $addfilter="";
    if(!empty($_REQUEST))
    {
    foreach($_REQUEST as $key => $val)
    {
        $addfilter. = " AND `$key` = '$val'";
    }
    }
    return $addFilter;
}

$myFilters=getAllRequests();
$sql = 'SELECT * FROM Table1 WHERE status=true' . $myFilters;

$_REQUESTすでにスーパーグローバルであるため、(GETとPOSTの両方で機能します)を渡す必要はありません。

于 2012-09-26T10:13:56.630 に答える
1
function getAllRequests($filter){
if(empty($filter)){
$addfilter = '';    
}else{
$addfilter = 'AND cat_id=' . $filter;
 }
}

$ sql ='SELECT * FROM Table1 WHERE status=true'。$ addfilter;

于 2012-09-26T10:16:23.140 に答える
0

オプションのパラメーターを使用する別のアプローチを使用できます。これにより、必要に応じてWHERE句が動的になります。このアプローチでは、すべてのパラメーターの値をSQLクエリに直接渡します。SQLクエリは次のようになります。

SELECT * 
FROM Table1 
WHERE 1 = 1
  AND (@status   IS NULL OR status   = @statusParam)
  AND (@category IS NULL OR category = @categoryParam)
  AND (@model    IS NULL OR model    = @modelParam)
  AND (@type     IS NULL OR type     = @typeParam)

次に、パラメータ、、、のいずれかが@statusParam@categoryParamとともに@modelParamクエリ@typeParamに渡されたNULL場合、その値を保持している列との比較は無視されます。述語を使用1 = 1しました。クエリに渡されるすべての値とすべてのNULL値の場合、すべてのWHERE句は表示されないため無視されます。WHERE 1 = 1これは常にtrueであり、のようになるためですSELECT * FROM Table1

于 2012-09-26T10:13:51.080 に答える
0

これを使って

function getAllRequests($filter){
    if(empty($filter)){
      $addfilter = '';    
     }else{
      $addfilter .= 'AND cat_id=' . $filter;
    }
  return $addfilter;
}

$sql = 'SELECT * FROM Table1 WHERE status=true' . getAllRequests($filter);
于 2012-09-26T10:14:07.027 に答える
0

配列を送信するときは、インデックスがあることを確認してください

 $conditions = array('category' => 'Camera', 'model' => 'Samsung' , 'type' => 'New')

今それをループします。あなたの他の状態で

foreach($conditions as $key =>$value){

    $addfilter .= 'AND ' . $key . ' = ' . $value;

}
于 2012-09-26T10:14:37.013 に答える