mysqli while循环需要一些帮助

时间:2015-09-21 18:31:49

标签: php mysqli while-loop sql-update sql-insert

我有一个' Bogus'表格中有一些新闻故事存储在'标题'和他们各自的日期存储在'日期'。

每隔x分钟,我就会获得一个新标题。我想将它与过去3小时内存储在数据库中的每个项目进行比较(使用similar_text()函数)。

如果新项目与DB中已有的项目类似,则将新标题与DB中已有的项目组合并更新现有项目。如果没有,则在DB中插入新标题作为新项目。

我的代码的问题在于它更新了所有项目而不是仅更新类似的项目,即使新项目与任何旧项目不相似,也无法将其添加到数据库中。

这是表结构:

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

我做错了什么?!

1 个答案:

答案 0 :(得分:0)

使用update语句中的行id仅更新该行。

$update_item = "UPDATE Bogus SET Titlu = '$titlu_update' WHERE ID=".$row['ID'];

在插入中,您可能还想定义日期,但这取决于您的表架构。