带有重复记录的PHP mysqli问题

带有重复记录的PHP mysqli问题,php,mysqli,Php,Mysqli,我在尝试将数据从MySQL数据库下载到PHP代码时遇到了一些问题。也就是说,我试图将多行数据插入到一个数组中。(这应该不是一项困难的任务) 我已经到了这样的地步,它从我的数据库中提取了所有的行,但并不是所有的行都有递增的ID号(例如,我有ID 1和ID 5,因为我已经删除了一些ID,并且计数继续递增) 我想知道如何删除1到5之间的重复行;(即2、3和4)以及5之后的所有行,直到下一行具有唯一数据 以下是到目前为止我得到的信息: 获取SQL数据 public function do_retriev

我在尝试将数据从MySQL数据库下载到PHP代码时遇到了一些问题。也就是说,我试图将多行数据插入到一个数组中。(这应该不是一项困难的任务)

我已经到了这样的地步,它从我的数据库中提取了所有的行,但并不是所有的行都有递增的ID号(例如,我有ID 1和ID 5,因为我已经删除了一些ID,并且计数继续递增)

我想知道如何删除1到5之间的重复行;(即2、3和4)以及5之后的所有行,直到下一行具有唯一数据

以下是到目前为止我得到的信息:

获取SQL数据

public function do_retrieve_stored_message_data()
{
    $con=mysqli_connect("localhost","root","","coursework_db");

    for ($i = 1; $i <= 999; $i = $i + 1)
    {
        $m_id_checker = $i;

        $SQL="SELECT message_id, message_date, message_time, message_last_value FROM cw_messages WHERE message_id = '" . 
        mysqli_real_escape_string($con, $m_id_checker) . "'";

        $resulting = mysqli_query($con, $SQL);

        while($db_field = mysqli_fetch_assoc($resulting))
        {
            $m_message_id = $db_field['message_id'];
            $m_message_date = $db_field['message_date'];
            $m_message_time = $db_field['message_time'];
            $m_message_last_value = $db_field['message_last_value'];
        }

        $m_arr_sql_query_parameters_1 = array($m_message_date, $m_message_time, $m_message_last_value);
        $m_arr_sql_query_parameters_2 = array_merge($m_arr_sql_query_parameters_1);
        $m_arr_sql_query_parameters = array_unique($m_arr_sql_query_parameters_2);

        foreach($m_arr_sql_query_parameters as $m_data)
        {
            echo "$m_data";
        }
    }

    $this->c_arr_stored_message_data['message-name'] = $m_message_id;
    $this->c_arr_stored_message_data['message-retrieved-data'] = $m_arr_sql_query_parameters;
(同样,句号只是用作标记,不会出现在真正的代码中)


Post脚本:“$m_data”中回显的数据会重复999次,正如您在for循环中所期望的那样,因此我知道它会拾取ID;但是在for循环之外,它只拾取我数据库中的最后一个数据条目,而不拾取任何其他条目。

即使在您发表评论之后,我也不清楚预期的目标

不过,我将给您留下这个片段,它将获取您的所有数据并将其保存到一个数组中——也许这会对您有所帮助

<?php
    $con=mysqli_connect("localhost","root","","coursework_db");

    $sql = "SELECT message_id, message_date, message_time, message_last_value FROM cw_message WHERE message_id = '" . mysqli_real_escape_string($con, $m_id_checker) . "'";
    $query = mysqli_query($con, $sql);

    // Actual Snippet begins here
    $rows = array();
    while (($data = mysqli_fetch_assoc($query)))
    {
        $rows[] = array(
            "id" => $data["message_id"],
            "date" => $data["message_date"],
            "time" => $data["message_time"],
            "last_value" => $data["message_last_value"],
        );
    }
    // Snippet to get all data into an array ends here

    // Printing the returned data
    print_r($rows);
?>

while
循环时,您没有对
内部分配的变量执行任何操作。每次迭代只覆盖它们。@ccKep
while
循环还是
for
循环?由于
while
循环位于
for
循环内,因此不需要分配它,因为
while
循环后的下一行处理的是覆盖变量
$m_message_id
$m_message_date
$m_message_time
$m_message_last_value
每次在while循环中。对于while循环之后的所有内容(包括
array\u merge
/
array\u unique
内容),这些变量只包含上一次迭代的值(例如,您的最后一行)。@ccKep我想覆盖这些变量,因为我想把新变量和旧变量一起保存在合并数组中,所以我想你应该一行一行地检查你的代码。它不会做你认为它会做的事。为了帮助您,最好您可以发布输入示例和预期输出。您的
array\u merge
调用甚至不做任何事情,因为您只给它一个数组。您的
array\u unique
调用不会执行您想要的操作,因为它不会对数组键进行操作(您没有分配数组键)。谢谢!这很有效。我甚至摆脱了可怕的
for
循环:D
<?php
    $con=mysqli_connect("localhost","root","","coursework_db");

    $sql = "SELECT message_id, message_date, message_time, message_last_value FROM cw_message WHERE message_id = '" . mysqli_real_escape_string($con, $m_id_checker) . "'";
    $query = mysqli_query($con, $sql);

    // Actual Snippet begins here
    $rows = array();
    while (($data = mysqli_fetch_assoc($query)))
    {
        $rows[] = array(
            "id" => $data["message_id"],
            "date" => $data["message_date"],
            "time" => $data["message_time"],
            "last_value" => $data["message_last_value"],
        );
    }
    // Snippet to get all data into an array ends here

    // Printing the returned data
    print_r($rows);
?>