找回密码
 加入
搜索
查看: 3762|回复: 6

[效率算法] (已解决,不知道怎么改成已解决)请教关于SQL查询中数据排序的问题

[复制链接]
发表于 2013-2-27 12:41:26 | 显示全部楼层 |阅读模式
本帖最后由 ahphsautoit 于 2013-2-28 10:59 编辑

如SQL数据表A中有1-12个记录项,其列位IDS(主键)分别为1-12。查询IDs列位并按IDs反向排序,理想结果应为:12、11、10……1,但实际排序结果是9、8、7……12、11、10、1。
#创建表的新主键值并返回新主键值
;$a:表名
Func _sql07($a)
        Dim $07a, $07b, $07c
        $07c=1
        _SQLite_Query(-1, "SELECT IDs FROM " & $a & " ORDER BY IDs DESC;", $07a);
        While _SQLite_FetchData($07a, $07b) = $SQLITE_OK
                 ExitLoop
        WEnd
        $07c=$07b[0]+1
        _SQLite_Exec(-1, "insert into " & $a & " (IDs) values (" & $07c & ");")
        Return $07c
EndFunc   ;==>_sql07
目前采用的实现方法是:将IDs的所有记录写入一个数组,再得出数组的最大值,如果数据表内的记录量大了,这种方法显然费时又费力。
上述提到的数据排序的问题,在普通的AU3默认的列表里也是一样,不按输入列表的顺序 ,而是按1、10、11、12、2……9这样排的,请问是为什么?还是我的某个关于数据排序的默认设置不对?
#创建表的新主键值并返回新主键值
;$a:表名
Func _sql07($a)
        Dim $07a, $07b, $07c,$07d,$07e
        $07c=1
        _SQLite_Query(-1, "SELECT IDs FROM " & $a & " ORDER BY IDs;", $07a);
        While _SQLite_FetchData($07a, $07b) = $SQLITE_OK
                If $07c=1 Then $07d=$07b
                $07c=$07c+1
                _arrayadd($07d,$07b[0])
        WEnd
        $07e=_ArrayMax($07d,1)+1
        _SQLite_Exec(-1, "insert into " & $a & " (IDs) values (" & $07e & ");")
        Return $07e
EndFunc   ;==>_sql07
发表于 2013-2-27 15:21:52 | 显示全部楼层
不会是SQLite不靠谱吧?SQLServer表示木有问题。
发表于 2013-2-27 15:22:36 | 显示全部楼层
另外你主键那一列是什么数据类型?莫非不是int或者bigint才会有这种情况?
发表于 2013-2-27 18:11:07 | 显示全部楼层
数据库满人
发表于 2013-2-27 18:14:15 | 显示全部楼层
回复 1# ahphsautoit

大哥 那是因為你那欄的資料型態是文字......所以 當然是照你上面所說的排序

只要改型態改變 或者  轉換一下在排序 就可以了
 楼主| 发表于 2013-2-28 10:51:32 | 显示全部楼层
回复 3# nmgwddj 明白了,谢谢啦!
 楼主| 发表于 2013-2-28 10:51:46 | 显示全部楼层
回复 5# kk_lee69



    明白了,谢谢啦!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 01:18 , Processed in 0.078012 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表