简而言之,我的问题是:为什么会这样
SELECT r.x, r.y FROM `base` AS r
WHERE r.l=50 AND AND r.n<>'name' AND 6=(SELECT COUNT(*) FROM surround AS d
WHERE d.x >= r.x -1 AND d.x <= r.x +1 AND
d.y>=r.y -1 AND d.y<=r.y +1 AND d.n='name')
Run Code Online (Sandbox Code Playgroud)
比这慢很多:
$q="SELECT x,y FROM `base` WHERE l=50 AND n<>'name'";
$sr=mysql_query($q);
if(mysql_num_rows($sr)>=1){
while($row=mysql_fetch_assoc($sr)){
$q2="SELECT x,y FROM surround WHERE n='name' AND x<=".
($row["x"]+1)." AND x>=".($row["x"]-1).
" AND y<=".($row["y"]+1)." AND y>=".($row["y"]-1)." ";
$sr2=mysql_query($q2);
if(mysql_num_rows($sr2)=6){
echo $row['x'].','.$row[y].'\n';
}
}
}
Run Code Online (Sandbox Code Playgroud)
php版本需要大约300毫秒才能完成,如果我运行"纯SQL"版本,无论是通过phpadmin还是通过php,大约需要5秒钟(当我使用BETWEEN用于x和y的那些范围时甚至是13秒)
我怀疑SQL版本通常会更快,更有效率,所以我想,我做错了什么,还是有意义的?
编辑:我按要求添加了两个表的结构:
CREATE TABLE IF …Run Code Online (Sandbox Code Playgroud) 过去曾在 Excel 中的 Weeknumber 和 Year 上问过几个问题,但是,我有一个特定的问题,我找不到答案。
我正在尝试以 YYWW 的格式获取年份和周数的组合,例如 1752 或 1801,基于带有日期的列,如下所示:
Date Year Week
01-01-2018 18 01
02-01-2018 18 01
...
31-12-2018 18 01
Run Code Online (Sandbox Code Playgroud)
简单地使用YEAR日期上的函数确定年份,使用日期上的函数确定周数ISOWEEKNUM。然后进行一些进一步的处理,根据年份和周数汇总数据,问题是,2018 年第 1 周也考虑了 2018 年 12 月 31 日的数据,而 12 月 31 日显然是不是在 2018 年的第 1 周,而是在 2019 年的第 1 周。
所以问题是,我怎么能“解决”这个问题,那么我怎样才能让 Excel 在 31-12-2018 给我 19 & 01?理想情况下,我正在寻找不涉及任何 VBA 的解决方案。
任何帮助深表感谢!