如何消除重复的结果

时间:2019-10-03 04:58:26

标签: php mysql

我正在查询,但它返回重复的日期

B

当我执行查询时,它会导致这些重复的日期


<select name="option_date">
        <?php
            $sql_product_id = "SELECT * FROM `pat_order_product` WHERE `product_id` = $id_product";
            $result_product_id = mysql_query($sql_product_id,$link);
            while($row_product_id = mysql_fetch_array($result_product_id)){
                $product_options = str_replace('\\','', $row_product_id["product_options"]);
                $data = $product_options;
                $books = json_decode($data, true);
                $product_option_date = $books[0]['value']['name'];
        ?>
                <option value="<?php echo $product_option_date; ?>"><?php echo $product_option_date; ?></option>
        <?php } ?></select>

我要寻找的是每个日期只能得到一个结果

2019年10月26日

2019年11月9日

2 个答案:

答案 0 :(得分:4)

您可以遍历结果,并生成一个值数组。在该数组上使用array_unique(),可以确保仅获得唯一值。

在处理查询中的用户输入时,您还应该使用准备好的语句(这意味着使用mysqli_而不是高度过时且不安全的mysql_ API)。

<?php 
// Create a MySQLi connection and set exception handling mode
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = new mysqli("localhost", "user", "pass", "database");

// Get the product-options and put the dates in an array using a prepared statement
$result = [];
$sql = "SELECT product_options FROM pat_order_product WHERE product_id = ?";
$stmt = $link->prepare($sql);
$stmt->bind_param("s", $id_product);
$stmt->execute();
$stmt->bind_result($product_options);
while ($stmt->fetch()) {
    $data = str_replace('\\', '', $product_options);
    $books = json_decode($data, true);
    $result[] = $books[0]['value']['name'];
}

// Loop the results with array_unique() to get unique results, and print it
?>
<select name="option_date">
    <?php 
    foreach (array_unique($result) as $value) {
        ?>
        <option value="<?php echo $value; ?>"><?php echo $value; ?></option>
        <?php
    }
    ?>
</select>

有用的阅读材料

答案 1 :(得分:2)

您要显示的日期嵌入product_options字段中的非结构化数据中,因此很难准确地获得您希望使用SQL的响应。

相反,在您的PHP中,您需要遍历日期以提供不同日期的列表。

执行此操作的一种方法是将需要区分的值用作字典中的键。该值无关紧要。由于字典的工作方式,您只会获得一次值。

$distinct_dates = [];
while($row_product_id = mysql_fetch_array($result_product_id)){
    $product_options = str_replace('\\','', $row_product_id["product_options"]);
    $data = $product_options;
    $books = json_decode($data, true);
    $product_option_date = $books[0]['value']['name'];
    $distinct_dates[$product_option_date] = 1;
}

然后,当您准备发出选择框时,可以执行以下操作:

<select name="option_date">
<?php foreach(array_keys($distinct_dates) as $date) { ?>
    <option value="<?php echo $date; ?>"><?php echo $date; ?></option>
<? } ?>
</select>