2015-09-21 151 views
0

我有一个'假'表,一些新闻报道存储在'标题'下,他们各自的日期存储在'日期'下。mysqli while循环需要一点帮助

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

如果新项目与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 

我在做什么错了?

回答

0

在update语句中使用行ID只更新该行。

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

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

+0

非常感谢,Bas,它做到了!现在我可以继续我的项目:) –

+0

不客气! –