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


Select query not working with post array with duplicate values

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

示例:

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

返回阵列速率: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];
 ?>

您的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];
?>