gpt4 book ai didi

php - 用于插入数据库的日期过滤器

转载 作者:行者123 更新时间:2023-11-30 22:56:54 24 4
gpt4 key购买 nike

我为我们的一位客户构建了一个简单的爬虫。我遇到了数据库中重复条目的问题。

基本上,我正在做的是查看一个有很多待售房屋的网站,然后从那里提取地址、邮政编码、城镇、价格和状态。

稍后插入数据库时​​,我还会生成 creation_date

原因是名称可以重复,以防它至少在 2 年前被插入。因此,只要创建日期至少在 2 年范围内,一个房子就可以在数据库中出现两次。

<?php 
//Comparison to current houses

$query = mysql_query("SELECT street, postcode, town, price, status, creation_time, print_status FROM house"); // Selecting the table

if (!$query) {
die('Invalid query: ' . mysql_error()); // checking for errors
}

while ($row = mysql_fetch_array($query)) {
// $row['street'];
// $row['postcode'];
// $row['town'];
// $row['price'];
// $row['status'];

$creation_time = $row['creation_time'];
$print_status = $row['print_status'];

$c = 0;
foreach ($houses as $house) {
$creation_time_u = strtotime($creation_time); // Makes creation time into Unix
$life_time = strtotime('+2 years', $creation_time_u); // Calculates +2 years from creation time
if (($row['street'] == $house[0]) && ($row['postcode'] == $house[1]) && ($row['town'] == $house[2]) && ($life_time >= $now)) {
unset($houses[$c]); // maybe use implode? When i do unset its leaving the array but the values are gone, so we get an empty row
}
}
$c++;
$houses = array_values($houses); // FIXES BROKEN INDEX AFTER USING UNSET
}
?>

完成后,我将新的 $houses 数组插入数据库,然后打印,这是下一步,但在这种情况下有点无关紧要。

所以,我不知道到底出了什么问题。如果我连续运行两次,它不会输入重复的条目,但如果我第二天运行它或其他什么。

它输入相同但加倍。这是我在数据库中找到的示例:
screenshot

是的,我花了太多时间查看这段代码,但我无法弄清楚为什么我的过滤器不起作用。我想这与我管理时间的方式有关,但不完全确定。

请指教!

最佳答案

而不是在 php 中计算时间间隔,您应该在 SQL 查询中选择相关房屋(参见 DATE_ADD here):

 SELECT 
street, postcode, town, price, status, creation_time, print_status
FROM house AS a
JOIN house AS b
ON a.street = b.street
AND a.postcode = b.postcode
AND a.town = b.town
WHERE
a.creation_time <= DATE_ADD(creation_time, INTERVAL 2 YEARS) -- select duplicates

关于php - 用于插入数据库的日期过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25932531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com