ahphsautoit 发表于 2013-2-27 12:41:26

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

本帖最后由 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+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)
        WEnd
        $07e=_ArrayMax($07d,1)+1
        _SQLite_Exec(-1, "insert into " & $a & " (IDs) values (" & $07e & ");")
        Return $07e
EndFunc   ;==>_sql07

nmgwddj 发表于 2013-2-27 15:21:52

不会是SQLite不靠谱吧?SQLServer表示木有问题。

nmgwddj 发表于 2013-2-27 15:22:36

另外你主键那一列是什么数据类型?莫非不是int或者bigint才会有这种情况?

lxwlxwayy 发表于 2013-2-27 18:11:07

数据库满人

kk_lee69 发表于 2013-2-27 18:14:15

回复 1# ahphsautoit

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

只要改型態改變 或者轉換一下在排序 就可以了

ahphsautoit 发表于 2013-2-28 10:51:32

回复 3# nmgwddj 明白了,谢谢啦!

ahphsautoit 发表于 2013-2-28 10:51:46

回复 5# kk_lee69



    明白了,谢谢啦!
页: [1]
查看完整版本: (已解决,不知道怎么改成已解决)请教关于SQL查询中数据排序的问题