2017-02-12 15 views
0

私は問題があります。人々がパーセンテージによってのみ特定の製品を表示するようにリンクをクリックできるように、ウェブサイト上にリンクを作成したいと考えています。たとえば、私のデータベースに割引率の列があり、最小割引と最大割引が表示されます。我々は最小と最大の割引を持っていると仮定します。 $ min = 12および$ max = 94;フィルタリングのような特定の割引を適用した商品のみを表示するリンクに入れたいと考えています。以下はリンクの例です。PHPを使用してループを作成してアドバンスフィルタを作成する

<a href="#">12% to 20%</a 
    <a href="#">21% to 30%</a> 
    <a href="#">31% to 40%</a> and so on until it reaches 
    <a href="#">81% to 90%</a> and the last will be 
    <a href="#">91% to 94%</a> 

データベースからの列の中で、最も小さい数値と最大の数値が頻繁に変更されます。私は解決策とそのうまく動作したが、私のコードは長すぎると私はコードのいくつかの行で行うことができる多くのステップを取ったように。私は下に私の作業コードを貼り付けたが、これはコードの数行に減らすことができると確信しています。

$catsql25 = "SELECT MAX(down_percentage) as largest FROM hot_deals"; 
$catquery25 = mysqli_query($conn, $catsql25); 
while ($row25 = mysqli_fetch_array($catquery25, MYSQLI_ASSOC)){ 
    $largest_number = $row25['largest']; 
} 

$catsql26 = "SELECT MIN(down_percentage) as smallest FROM hot_deals"; 
$catquery26 = mysqli_query($conn, $catsql26); 
while ($row26 = mysqli_fetch_array($catquery26, MYSQLI_ASSOC)){ 
    $smallest_number = $row26['smallest']; 
} 

$array_tens = array(10,20,30,40,50,60,70,80,90,100); 


foreach ($array_tens as $value){ 

    if(($value - $smallest_number <= 10) && ($value - $smallest_number > 0)){ 
     echo '<a href="/exp.php?fst='.$smallest_number.'&lst='.$value.'"><div class="lfmen2">'; 
     echo $smallest_number." to ".$value."</div></a>"; 
     $next_num = $value + 1; 
     $next_ten = 9; 
     $stop_num = floor($largest_number/10); 
     $stop_num2 = $stop_num * 10; 
     //echo $stop_num2.'<br>'; 
     $num_rounds = $stop_num2 - $value; 
     $num_rounds2 = $num_rounds/10; 
     //echo $num_rounds2; 
     for ($i = 1; $i <= $num_rounds2; $i++){ 
     $end_num = $next_num + $next_ten; 
     echo '<a href="/exp.php?fst='.$next_num.'&lst='.$end_num.'"><div class="lfmen2">'; 
     echo $next_num; 
     echo " to "; 
     echo $end_num; 
     echo "</div></a>"; 
     $next_num += 10; 
     $end_num += 10; 
     } 
    } 
} 


foreach ($array_tens as $value2){ 

    if(($largest_number - $value2 < 10) && ($largest_number - $value2 > 0)){ 
     $lsst = $value2 + 1; 
     if($lsst != $largest_number){ 
     echo '<a href="/exp.php?fst='.$lsst.'&lst='.$largest_number.'"><div class="lfmen2">'.$lsst." to ".$largest_number."</div></a>"; 
     } 
     elseif($lsst == $largest_number){ 
      echo '<a href="/exp.php?fnly='.$largest_number.'"><div class="lfmen2">'.$largest_number.'</div></a>'; 
     } 
    } 

} 

私はすべての混乱を知っています。しかし、 ありがとう。あなたができる

答えて

0

まず最初は、唯一のSQLクエリです:

$catsql = "SELECT MAX(down_percentage) as largest, MIN(down_percentage) as smallest FROM hot_deals"; 

そして、あなただけの1ループ必要があります。その後

$catquery = mysqli_query($conn, $catsql); 
while ($row = mysqli_fetch_array($catquery, MYSQLI_ASSOC)){ 
    $largest_number = $row['largest']; 
    $smallest_number = $row['smalest']; 
} 

を、あなただけの1 foreachループを作ることができます。 2つの条件が同じループになる可能性が「あれば」:

foreach ($array_tens as $value) { 

    if (($value - $smallest_number <= 10) && ($value - $smallest_number > 0)) { 
     echo '<a href="/exp.php?fst='.$smallest_number.'&lst='.$value.'"><div class="lfmen2">'; 
     echo $smallest_number." to ".$value."</div></a>"; 
     $next_num = $value + 1; 
     $next_ten = 9; 
     $stop_num = floor($largest_number/10); 
     $stop_num2 = $stop_num * 10; 
     //echo $stop_num2.'<br>'; 
     $num_rounds = $stop_num2 - $value; 
     $num_rounds2 = $num_rounds/10; 
     //echo $num_rounds2; 
     for ($i = 1; $i <= $num_rounds2; $i++) { 
      $end_num = $next_num + $next_ten; 
      echo '<a href="/exp.php?fst='.$next_num.'&lst='.$end_num.'"><div class="lfmen2">'; 
      echo $next_num; 
      echo " to "; 
      echo $end_num; 
      echo "</div></a>"; 
      $next_num += 10; 
      $end_num += 10; 
     } 
    } 

    if (($largest_number - $value < 10) && ($largest_number - $value > 0)) { 
     $lsst = $value + 1; 
     if ($lsst != $largest_number) { 
      echo '<a href="/exp.php?fst='.$lsst.'&lst='.$largest_number.'"><div class="lfmen2">'.$lsst." to ".$largest_number."</div></a>"; 
     } elseif ($lsst == $largest_number) { 
      echo '<a href="/exp.php?fnly='.$largest_number.'"><div class="lfmen2">'.$largest_number.'</div></a>'; 
     } 
    } 
} 

はそれを読みやすくするために、あなたも何か知っているようにコードをコメントができます。

これは良いインデントとあなたが正しいです。

希望します。

関連する問題