mysqli while 循环需要一些帮助
a little help needed with mysqli while loop
我有一个 'Bogus' table,其中一些新闻故事存储在 'Title' 下,它们各自的日期存储在 'Date' 下。
每隔 x 分钟,我获取一个新标题。我想将它与过去 3 小时内存储在数据库中的每个项目进行比较(使用 similar_text() 函数)。
如果新项目与数据库中已有的项目相似,则将新标题与数据库中已有的项目合并并更新现有项目。如果没有,则将新标题作为新项目插入数据库中。
我的代码的问题是它更新所有项目而不是只更新相似的项目,即使新项目与任何旧项目都不相似,它也无法添加到数据库中。
这是 table 结构:
ID Titlu Data
1 Cum să decojești simultan mai multe 2015-09-21 20:17:09
2 David Cameron, rataciri cu marijuana, 2015-09-21 20:17:09
3 Dalai Lama vrea sa vina in Europa 2015-09-21 20:17:09
4 Judecătorul lui Oprescu cere DNA 2015-09-21 20:17:09
还有我的代码:
$nou = 'Dalai Lama vrea sa vina in Europa';
$delim = '///';
$last3hours = "SELECT * FROM Bogus WHERE Data >= now() - INTERVAL 3 HOUR ORDER BY Data DESC";
$result3hours = mysqli_query($mysqli, $last3hours) or Die (mysqli_error());
if ($result3hours)
{
while($row = mysqli_fetch_assoc($result3hours))
{
similar_text($nou, $row['Titlu'], $percent);
if ($percent >= 40)
{
$titlu_update = $row['Titlu'] . $delim . $nou;
//Update
$update_item = "UPDATE Bogus SET Titlu = '$titlu_update'";
if (!mysqli_query($mysqli, $update_item))
{
die('Eroare (update_item): ' . mysqli_error($mysqli));
}
$already_in_db = true;
}
}
if (!$already_in_db)
{
$insert_new_item = "INSERT INTO Bogus (Titlu) VALUES ('$nou')";
if (!mysqli_query($mysqli, $insert_new_item))
{
die('Eroare (Single_Item_Update): ' . mysqli_error($mysqli));
}
}
}
// Free result set
mysqli_free_result($result3hours);
//Close connection
mysqli_close($mysqli);
期望的结果应该是:
ID Titlu
1 Cum să decojești simultan mai multe
2 David Cameron, rataciri cu marijuana,
3 Dalai Lama vrea sa vina in Europa///Dalai Lama vrea sa vina in Europa
4 Judecătorul lui Oprescu cere DNA
相反,我得到:
ID Titlu
1 Dalai Lama vrea sa vina in Europa///Dalai Lama vrea sa vina in Europa
2 Dalai Lama vrea sa vina in Europa///Dalai Lama vrea sa vina in Europa
3 Dalai Lama vrea sa vina in Europa///Dalai Lama vrea sa vina in Europa
4 Dalai Lama vrea sa vina in Europa///Dalai Lama vrea sa vina in Europa
我做错了什么?!
在更新语句中使用行 ID 仅更新该行。
$update_item = "UPDATE Bogus SET Titlu = '$titlu_update' WHERE ID=".$row['ID'];
在您的插入中,您可能还想定义日期,但这取决于您的 table 架构。
我有一个 'Bogus' table,其中一些新闻故事存储在 'Title' 下,它们各自的日期存储在 'Date' 下。
每隔 x 分钟,我获取一个新标题。我想将它与过去 3 小时内存储在数据库中的每个项目进行比较(使用 similar_text() 函数)。
如果新项目与数据库中已有的项目相似,则将新标题与数据库中已有的项目合并并更新现有项目。如果没有,则将新标题作为新项目插入数据库中。
我的代码的问题是它更新所有项目而不是只更新相似的项目,即使新项目与任何旧项目都不相似,它也无法添加到数据库中。
这是 table 结构:
ID Titlu Data
1 Cum să decojești simultan mai multe 2015-09-21 20:17:09
2 David Cameron, rataciri cu marijuana, 2015-09-21 20:17:09
3 Dalai Lama vrea sa vina in Europa 2015-09-21 20:17:09
4 Judecătorul lui Oprescu cere DNA 2015-09-21 20:17:09
还有我的代码:
$nou = 'Dalai Lama vrea sa vina in Europa';
$delim = '///';
$last3hours = "SELECT * FROM Bogus WHERE Data >= now() - INTERVAL 3 HOUR ORDER BY Data DESC";
$result3hours = mysqli_query($mysqli, $last3hours) or Die (mysqli_error());
if ($result3hours)
{
while($row = mysqli_fetch_assoc($result3hours))
{
similar_text($nou, $row['Titlu'], $percent);
if ($percent >= 40)
{
$titlu_update = $row['Titlu'] . $delim . $nou;
//Update
$update_item = "UPDATE Bogus SET Titlu = '$titlu_update'";
if (!mysqli_query($mysqli, $update_item))
{
die('Eroare (update_item): ' . mysqli_error($mysqli));
}
$already_in_db = true;
}
}
if (!$already_in_db)
{
$insert_new_item = "INSERT INTO Bogus (Titlu) VALUES ('$nou')";
if (!mysqli_query($mysqli, $insert_new_item))
{
die('Eroare (Single_Item_Update): ' . mysqli_error($mysqli));
}
}
}
// Free result set
mysqli_free_result($result3hours);
//Close connection
mysqli_close($mysqli);
期望的结果应该是:
ID Titlu
1 Cum să decojești simultan mai multe
2 David Cameron, rataciri cu marijuana,
3 Dalai Lama vrea sa vina in Europa///Dalai Lama vrea sa vina in Europa
4 Judecătorul lui Oprescu cere DNA
相反,我得到:
ID Titlu
1 Dalai Lama vrea sa vina in Europa///Dalai Lama vrea sa vina in Europa
2 Dalai Lama vrea sa vina in Europa///Dalai Lama vrea sa vina in Europa
3 Dalai Lama vrea sa vina in Europa///Dalai Lama vrea sa vina in Europa
4 Dalai Lama vrea sa vina in Europa///Dalai Lama vrea sa vina in Europa
我做错了什么?!
在更新语句中使用行 ID 仅更新该行。
$update_item = "UPDATE Bogus SET Titlu = '$titlu_update' WHERE ID=".$row['ID'];
在您的插入中,您可能还想定义日期,但这取决于您的 table 架构。