1

開始価格と終了価格を含む配列で 5 つの範囲を返す関数を作成するアイデア。この関数は、カテゴリ、ブランド、または使用されるフィルターに対してこれらの範囲を作成する必要があります。多くの e コマース Web サイトでは、価格帯フィルターを既に使用しています。現在、このような関数を作成できます。しかし、ここでステップ範囲を追加する必要があります。これらのステップを、そのカテゴリの全体的な価格帯に基づいて自動的に行う方法はありますか?

function price_range($category_id=0, $step=199)
{   
$output = '';
$return = array();

$query = "SELECT * FROM products WHERE category = ".$category_id;
$query .= " ORDER BY PRICE";
$result = mysql_query($query);

if (!$result)
{
    return FALSE;
}
else
{
    if((mysql_num_rows($result) == 0))
    {
        return FALSE;
    }
    else
    { 
        while ($row = mysql_fetch_array($result)) 
        { 

            $prices = array($row['price']); 
        } 
        $ranges = array(); 

        foreach($prices as $p) 
        { 
            $index = floor($p / $step);  
            if(isset($ranges[$index])) 
                $ranges[$index]++; 
            else 
                $ranges[$index] = 1; 
        } 

        for($i = 0; $i <= max(array_keys($ranges)); $i++) 
        { 
            //$output = "(<a href=\"?start=" . ($step * $i) . "&end=" . ($step * ($i + 1)) . "\">" . ($step * ($i + 1)) . " - " . ($step * $i) . "(" . $ranges[$i] . ")<br>";
            $return[$i]['start'] =  ($step * $i);
            $return[$i]['end'] =  ($step * ($i + 1));
            $return[$i]['product_count'] = $ranges[$i];
        }  
    }
}
return $return;
}
4

2 に答える 2

0

何かのようなもの

SELECT
   (MAX(PRICE) - MIN(PRICE)) / COUNT(product) AS step
FROM
   products
WHERE
   category = ?
GROUP BY
   category
于 2012-08-16T22:37:48.213 に答える
0

レンジ機能を使ってみてください。

$steps = 5;
$delta = floor((max($prices) - min($prices)) / $steps);
$price_steps = range(min($prices), max($prices), $delta);

$price_steps は次のようになります。

array(6) {
  [0]=>
  float(0)
  [1]=>
  float(20)
  [2]=>
  float(40)
  [3]=>
  float(60)
  [4]=>
  float(80)
  [5]=>
  float(100)
}
于 2012-08-17T00:11:08.963 に答える