选择查询不使用具有重复值的

时间:2016-05-15 18:32:13

标签: php arrays select implode

我的用户发布了一系列类别,然后我需要根据用户选择的类别数组从表中选择费率。 到目前为止,我已经能够使这个工作正常。

示例:

阵列类别:汽车零件,自行车,饼干,吊扇,搅拌机,艺术品

返回阵列费率:60,35,25,20,15,5

然后我根据费率数组中选择的费率进行计算。如果数组中没有重复值,我下面的代码可以正常工作。

我遇到的问题是,如果用户输入两次类别,则返回的数组仅返回输入类别的一个实例的费率

示例:

阵列类别:汽车零件,自行车,饼干,吊扇,自行车,搅拌机,饼干,艺术品

返回阵列费率:60,35,25,20,15,5

应该是什么 - >阵列费率:60,35,25,20,35,15,25,5

返回的数组正在丢弃重复的速率值,但我需要根据返回数组的每一行中的速率进行计算。

我现在不知道如何使返回的值保留在返回的数组中。任何帮助都会很棒,或者我可以用其他方式做任何建议。

 $qty=mysql_real_escape_string($_POST['qty'];
 $pcategories=mysql_real_escape_string($_POST['pcategories'];

 <?php foreach($qty as $a => $b){ ?>

 <?php // Get the duty rate based on the product categorie user selected 
   $connection = mysqli_connect("localhost","root","","customs") or  `enter
    code here`die("Error " . mysqli_error($connection));
$sql = "
    SELECT `categories`, `rate`
    FROM `lt_products`
      WHERE `categories` IN ('".implode("','",$pcategories)."')
        ORDER BY FIELD(categories, '".implode("','",$pcategories)."')";
         $result = mysqli_query($connection, $sql)or die(mysql_error());

 while($row = mysqli_fetch_assoc($result)) {
   $row_rate[] =  $row["rate"];
 } 
     $rate_row[] = $row_rate[$a];
 ?>

1 个答案:

答案 0 :(得分:0)

您的SQL语句不依赖于$a$b,那么为什么不从foreach循环中取出它?每次循环都不需要向数据库询问相同的数据。

然后你可以替换这段代码

while($row = mysqli_fetch_assoc($result)) {
    $row_rate[] =  $row["rate"];
}

使用此代码

while($row = mysqli_fetch_assoc($result)) {
    $row_rate[$row["categories"]] =  $row["rate"];
}

然后添加此代码

$result_rate = []; //or array() - depends on your PHP version
foreach ($pcategories as $pcat) {
    $result_rate[] =  $row_rate[$pcat];
}

现在您有一个与您的输入类别数组相对应的$result_rate数组,因此您可以替换此代码

$rate_row[] = $row_rate[$a];

使用此代码

$row_rate[] = $result_rate[$a];

这里是完整的建议代码:

$qty=mysql_real_escape_string($_POST['qty'];
$pcategories=mysql_real_escape_string($_POST['pcategories'];

<?php // Get the duty rate based on the product categorie user selected 
$connection = mysqli_connect("localhost","root","","customs") or  `enter code here`die("Error " . mysqli_error($connection));
$sql = " SELECT `categories`, `rate`
         FROM `lt_products`
         WHERE `categories` IN ('".implode("','",$pcategories)."')
         ORDER BY FIELD(categories, '".implode("','",$pcategories)."')";
$result = mysqli_query($connection, $sql)or die(mysql_error());

while($row = mysqli_fetch_assoc($result)) {
    $row_rate[$row["categories"]] =  $row["rate"];
}

$result_rate = []; //or array() - depends on your PHP version
foreach ($pcategories as $pcat) {
    $result_rate[] =  $row_rate[$pcat];
}

$rate_row = []; //or array() - depends on your PHP version
<?php foreach($qty as $a => $b){
    $rate_row[] = $result_rate[$a];
?>