带有重复记录的PHP mysqli问题
我在尝试将数据从MySQL数据库下载到PHP代码时遇到了一些问题。也就是说,我试图将多行数据插入到一个数组中。(这应该不是一项困难的任务) 我已经到了这样的地步,它从我的数据库中提取了所有的行,但并不是所有的行都有递增的ID号(例如,我有ID 1和ID 5,因为我已经删除了一些ID,并且计数继续递增) 我想知道如何删除1到5之间的重复行;(即2、3和4)以及5之后的所有行,直到下一行具有唯一数据 以下是到目前为止我得到的信息: 获取SQL数据带有重复记录的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
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
循环时,您没有对内部分配的变量执行任何操作。每次迭代只覆盖它们。@ccKepwhile
循环还是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);
?>