以文本方式查看主题

-  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_数学函数(描述及实例)

Pict 函数名称参数示例说明
abs(数值表达式)select abs(-23.4)返回23.4返回指定数值表达式的绝对值(正值)
pi无参数select pi()返回3.14159265358979返回π的值
cos(浮点表达式)select  cos(pi()/3)返回0.5返回指定弧度的余弦值
sin(浮点表达式)select  sin(pi()/6)返回0.5返回指定弧度的正弦值
cot(浮点表达式)select cot(pi()/4)返回1返回指定弧度的余切值

--  作者: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


图片点击可在新窗口打开查看此主题相关图片如下:000.png
图片点击可在新窗口打开查看

上面代码,好像有被ft网站,删了一部分,下面是完整代码
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:000.txt


[此贴子已经被作者于2021/2/7 15:32:46编辑过]

--  作者:有点蓝
--  发布时间:2021/2/7 15:30:00
--  
请花点时间认真学习一下sql里的函数的用法,多搜素几篇文章看看。

而不是把foxtable的代码硬套到sql里使用,完全不是一回事