| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1327 人关注过本帖
标题:如何在SELECT... FROM... WHERE代码中增加识别新旧功能
取消只看楼主 加入收藏
cluna2013
Rank: 1
等 级:新手上路
帖 子:234
专家分:0
注 册:2013-3-2
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
如何在SELECT... FROM... WHERE代码中增加识别新旧功能
各位朋友好!
下面是程序根据时间差异找出需要更新的文件
SELECT files1.* FROM files1 WHERE !files1.修改时间 in (SELECT 修改时间 FROM files2)
问题:更新显然是用新修改的文件替换旧文件,但是当files2.*的文件比files1.*还要新的时候,这段代码缺少时间新旧比较,会将旧文件替换新文件。
求助:如何修改该代码使之避免以旧换新?
搜索更多相关主题的帖子: 修改 SELECT FROM 文件 代码 
2022-09-20 13:00
cluna2013
Rank: 1
等 级:新手上路
帖 子:234
专家分:0
注 册:2013-3-2
收藏
得分:0 
以下是引用吹水佬在2022-9-20 17:32:57的发言:

根据什么确定文件是新或旧

谢谢吹水佬关注,我还以为此问题没解了
CREATE TABLE files0 (子目录 C(28), 文件名 C(140), 文件大小 N(12), 修改时间 T)
根据修改时间。
2022-09-21 07:04
cluna2013
Rank: 1
等 级:新手上路
帖 子:234
专家分:0
注 册:2013-3-2
收藏
得分:0 
以下是引用csyx在2022-9-21 07:39:44的发言:

m.older = 'files1'
m.newer = 'files2'

SELECT a.* FROM (m.newer) a ;
    inner join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where a.修改时间 > b.修改时间

如果希望同时包括 files2 中有,files1 中没有的,这样:

SELECT a.* FROM (m.newer) a ;
    left join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where (a.修改时间 > b.修改时间) or (b.文件名 is null)

成功了,谢谢!
2022-09-21 08:39
cluna2013
Rank: 1
等 级:新手上路
帖 子:234
专家分:0
注 册:2013-3-2
收藏
得分:0 
以下是引用csyx在2022-9-21 07:39:44的发言:

m.older = 'files1'
m.newer = 'files2'

SELECT a.* FROM (m.newer) a ;
    inner join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where a.修改时间 > b.修改时间

如果希望同时包括 files2 中有,files1 中没有的,这样:

SELECT a.* FROM (m.newer) a ;
    left join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where (a.修改时间 > b.修改时间) or (b.文件名 is null)

恁提供的代码
SELECT a.* FROM (m.newer) a ;
    left join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where (a.修改时间 > b.修改时间) or (b.文件名 is null)
最后部分or (b.文件名 is null)在运转中会把所有的文件都算上;没有这一块,又会漏掉新文件。有没有其他办法?
2022-09-21 15:10
cluna2013
Rank: 1
等 级:新手上路
帖 子:234
专家分:0
注 册:2013-3-2
收藏
得分:0 
以下是引用csyx在2022-9-21 17:23:22的发言:

如果分开查询的结果没问题,就两个分开的查询结果联合起来

SELECT a.* FROM (m.newer) a ;
    inner join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where a.修改时间 > b.修改时间 ;
union ;
SELECT a.* FROM (m.newer) a ;
    left join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where b.文件名 is null

评价:
第一
SELECT files1.* FROM files1 WHERE !files1.修改时间 in (SELECT 修改时间 FROM files2)
这段代码速度非常快,但是不能辨别时间差异究竟哪个是新的,所以有风险;另外,如果相同的文件放在不同的子目录中,它也会忽视;
第二
m.older = 'files1'
m.newer = 'files2'
SELECT a.* FROM (m.newer) a ;
    inner join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where a.修改时间 > b.修改时间
这段代码使用==达到精准的效果,不过速度明显变慢,也会无视新增加的文件;
第三
SELECT a.* FROM (m.newer) a ;
    left join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where (a.修改时间 > b.修改时间) or (b.文件名 is null)
或者
SELECT a.* FROM (m.newer) a ;
    inner join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where a.修改时间 > b.修改时间 ;
union ;
SELECT a.* FROM (m.newer) a ;
    left join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where b.文件名 is null
只要把b.文件名 is null加上去,就会出现更新一样的文件、并且修改时间也一样!

[此贴子已经被作者于2022-9-22 09:24编辑过]

2022-09-22 09:19
cluna2013
Rank: 1
等 级:新手上路
帖 子:234
专家分:0
注 册:2013-3-2
收藏
得分:0 
???

[此贴子已经被作者于2022-9-22 13:35编辑过]

2022-09-22 09:29
cluna2013
Rank: 1
等 级:新手上路
帖 子:234
专家分:0
注 册:2013-3-2
收藏
得分:0 
评价:
第一
SELECT files1.* FROM files1 WHERE !files1.修改时间 in (SELECT 修改时间 FROM files2)
这段代码速度非常快,但是不能辨别时间差异究竟哪个是新的,所以有风险;另外,如果相同的文件放在不同的子目录中,它也会忽视;
第二
m.older = 'files1'
m.newer = 'files2'
SELECT a.* FROM (m.newer) a ;
    inner join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where a.修改时间 > b.修改时间
这段代码使用==达到精准的效果,不过速度明显变慢,也会无视新增加的文件;
第三
SELECT a.* FROM (m.newer) a ;
    left join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where (a.修改时间 > b.修改时间) or (b.文件名 is null)
或者
SELECT a.* FROM (m.newer) a ;
    inner join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where a.修改时间 > b.修改时间 ;
union ;
SELECT a.* FROM (m.newer) a ;
    left join (m.older) b on a.子目录 == b.子目录 and a.文件名 == b.文件名 ;
    where b.文件名 is null
只要把b.文件名 is null加上去,就会出现更新一样的文件、并且修改时间也一样!
2022年9月23日12:05:48发现:
备份以后的文件,修改时间会出现略微变化,所以才会造成明明文件已经备份了,却还固执的认为没有更新!——不是代码的问题。


[此贴子已经被作者于2022-9-23 12:10编辑过]

2022-09-22 09:30
cluna2013
Rank: 1
等 级:新手上路
帖 子:234
专家分:0
注 册:2013-3-2
收藏
得分:0 
在两个盘同样目录中备份,总是扯不清楚,来回更新也无济于事,最后将旧的删除换成复制才解决问题。问题也许不是出在代码上。
文件备份.rar (8.95 KB)

公开这个小程序,大家可以下载使用,有问题可以拿出来讨论;有解决问题方案建议共享。
[b]2022年9月23日12:05:48发现:
备份以后的文件,修改时间会出现略微变化,所以才会造成明明文件已经备份了,却还固执的认为没有更新!——不是代码的问题。
[color=#FF0000]

最后还是改回到旧代码
SELECT files1.* FROM files1 WHERE !files1.修改时间 in (SELECT 修改时间 FROM files2)
这段代码除了分不清新旧,不但速度快,而且没新代码莫名其妙的毛病。
2022年9月28日20:25:06
[/color]

[此贴子已经被作者于2022-9-28 20:26编辑过]

2022-09-22 13:33
快速回复:如何在SELECT... FROM... WHERE代码中增加识别新旧功能
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013993 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved