Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何消除重复结果_Php_Mysql - Fatal编程技术网

Php 如何消除重复结果

Php 如何消除重复结果,php,mysql,Php,Mysql,我正在进行查询,但它返回重复的日期 <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);

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

<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>


您显示的日期嵌入在
product\u 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>


您可以对结果进行循环,并生成一个值数组。在该数组上使用
array\u unique()
,可以确保只获取唯一值

在处理查询中的用户输入时,还应该使用预先准备好的语句(这意味着使用
mysqli
而不是非常过时和不安全的
mysql
API)


为日期字段添加分组依据。然后它工作得非常快。在代码中要寻找的一件事是,您似乎将一个值从一个变量传递到另一个变量,而不使用它-
$product\u options
-
$data
-
json\u decode($data,true)
。如果你不需要重用一个变量,考虑一下你是否真的需要首先创建它。我承认在某些情况下,它可以提高代码的可读性,但这只能根据具体情况来确定。
<select name="option_date">
<?php foreach(array_keys($distinct_dates) as $date) { ?>
    <option value="<?php echo $date; ?>"><?php echo $date; ?></option>
<? } ?>
</select>