以文本方式查看主题 - Foxtable(狐表) (http://www.foxtable.com/bbs/index.asp) -- 专家坐堂 (http://www.foxtable.com/bbs/list.asp?boardid=2) ---- 第二个参数为空 (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=160581) |
||||||||||||||||||||||||
-- 作者:zhangjian222200 -- 发布时间:2021/2/7 10:02:00 -- 第二个参数为空 Dim drs As List(of DataRow) drs = DataTables("订单").SQLSelect("产品 = \'PD02\'","", "日期 Desc") ’假设订单表,有100万行,甚至1000万行,第二个参数为空,查找全部,会大幅度影响服务器效率么? Dim Sum As Integer For Each dr As DataRow In drs Sum = Sum + dr("数量") Next Output.Show(Sum)
|
||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2021/2/7 10:37:00 -- 看查询结果,加载的数据越多影响越大 |
||||||||||||||||||||||||
-- 作者:zhangjian222200 -- 发布时间:2021/2/7 11:06:00 -- var latitude1; // 纬度,浮点数,由getLocation获得,数据随不同地点变化 var longitude1 ; // 经度,浮点数,由getLocation获得,数据随不同地点变化 var latitude2; // 纬度,浮点数,服务器字段“纬度”已有数据,数据固定 var longitude2; // 经度,浮点数,服务器字段“经度”已有数据,数据固定 wx.getLocation({ type: \'gcj02\', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入\'wgs84\'|\'gcj02\' success: function (res) { latitude1 = res.latitude; // 纬度,浮点数,范围为90 ~ -90 longitude1 = res.longitude; // 经度,浮点数,范围为180 ~ -180。 latitude2 = document.getElementById("latitude2").value; // 纬度,浮点数 longitude2 = document.getElementById("longitude2").value; // 经度,浮点数
latitude1 = latitude1 * Math.PI / 180.0;
latitude2 = latitude2 * Math.PI / 180.0;
var latitude5 = latitude1 - latitude2;
var Lb5 = longitude1 * Math.PI / 180.0 - longitude2 * Math.PI / 180.0;
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(latitude5 / 2), 2) + Math.cos(latitude1) * Math.cos(latitude2) * Math.pow(Math.sin(Lb5 / 2), 2)));
s = s * 6378.137;//地球半径
s = Math.round(s * 10000) / 10000; //这是求s(单位是米)的方法,计算还挺准 下面是问题: Dim drs As List(of DataRow) Dim filter As String = “” ’需要筛选s>5000,这个表达式怎么写?主要是涉及到了“纬度”、“经度”,两个列,有没有官方文档可以查? drs = DataTables("物品信息").SQLSelect(filter,20,"添加时间 Desc") [此贴子已经被作者于2021/2/8 8:36:44编辑过]
|
||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2021/2/7 11:20:00 -- 表格添加一个辅组列,把每一行计算结果s保存到辅组列,然后通过辅组列做条件查询 |
||||||||||||||||||||||||
-- 作者:zhangjian222200 -- 发布时间:2021/2/7 12:01:00 -- 不行啊, 因为, 是要计算两个经纬点之间的距离, 一个经纬度值在服务器上, 另一个经纬度是动态的 所以 无法直接计算出s,放在第三列 1.sqlselect,filter里面,用能直接计算两个列数据+外部数据吗?即filter里面,计算出数值s,行吗?若不行,该怎么办? 2.sqlselect,filter里面,表达式列,可以使用外部数据参与计算吗?
[此贴子已经被作者于2021/2/7 13:17:04编辑过]
|
||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2021/2/7 13:36:00 -- 参考:http://blog.sina.com.cn/s/blog_a3ca810001014r81.html |
||||||||||||||||||||||||
-- 作者:zhangjian222200 -- 发布时间:2021/2/7 14:10:00 -- 楼上是sqlserver里面的函数,这里帖子里,主要是数学函数有用 下面计算s的代码,不看数学函数,2处粉色将字符列(实际都是数字),作为filter的表达式,与5000比较,我感觉,这样应该是不行 想问:有没有代替的办法 Dim drs As List(of DataRow) dim s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin([纬度列] / 2), 2) + Math.cos(latitude1) * Math.cos(latitude2) * Math.pow(Math.sin([经度列] / 2), 2))); Dim filter As String = “s>5000” drs = DataTables("物品信息").SQLSelect(filter,20,"添加时间 Desc") |
||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2021/2/7 14:20:00 -- 在sql里使用数学函数计算啊 SQL_Server_2005_数学函数(描述及实例)
|
||||||||||||||||||||||||
-- 作者:zhangjian222200 -- 发布时间:2021/2/7 15:27:00 -- 按6楼对数学函数进行处理, 然后, 在命令窗口测试,发现找不到行 Dim latitude1 = "1500" Dim l Dim drs As List(of DataRow) drs = DataTables("会员资料").SQLSelect("设置查询_纬度 is not null and (5000 > Math.round(2 * Math.asin(Math.sqrt(Math.power(Math.sin((latitude1 - ([纬度] * Math.PI / 180.0)) / 2), 2) + Math.cos(latitude1) * Math.cos([纬度] * Math.PI / 180.0) * Math.power(Math.sin((longitude1 * Math.PI / 180.0 - [经度] * Math.PI / 180.0) / 2), 2)))*6378.137))",20,"添加时间 Desc") msgbox(drs.Count) ’设置为5000<**,结果还是0 上面代码,好像有被ft网站,删了一部分,下面是完整代码
[此贴子已经被作者于2021/2/7 15:32:46编辑过]
|
||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2021/2/7 15:30:00 -- 请花点时间认真学习一下sql里的函数的用法,多搜素几篇文章看看。 而不是把foxtable的代码硬套到sql里使用,完全不是一回事
|