2015-09-21 216 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

不客氣! –