尝试按升序排序从数据库中检索数据。
我的查询是
select pid
from `patient_list` t1, patient_info t2
where pid > '2000' and t2.id=t1.id
order by pid asc
limit 10
但数据就像
pid
2221
2223
2224
2227
**223**
2238
2239
2242
2245
2247
**225**
如何排序?
答案 0 :(得分:6)
您的数据按字母数字排序。要强制进行数字排序,必须将数据转换为数字。例如pid * 1
select pid
from `patient_list` t1, patient_info t2
where pid > '2000'
and t2.id=t1.id
order by pid * 1 asc
limit 1
由于您的pid
属于字符串类型,因此您应该考虑将其更改为int
。
答案 1 :(得分:0)
您的pid-columns似乎不是数字字段类型,因此将值作为字符串值进行处理。 在你的情况下,order-by-algorithm是按字符排序整个字符串char而不是数字的实际值
2227, 223, 2238
将排序为AAAG, AAB, AABG
我假设它的varchar,尝试将其更改为INT
答案 2 :(得分:0)
为了做到这一点,你应该按照pid和它自身的长度排序。这个技巧甚至适用于非整数的pids。
select pid from patient_list t1, patient_info t2
where length(pid) >= 4 and pid > '2000' and t2.id=t1.id
order by length(pid) asc, pid asc limit 1
答案 3 :(得分:0)
首先,清理数据。其次,转为int。第三,排序和/或过滤。
select pid from `patient_list` t1, patient_info t2
where replace(pid, "*", "") + 0 > 2000 and t2.id = t1.id
order by replace(pid, "*", "") + 0
limit 1
请注意,您还要对该字段进行过滤,因此您应该使用替换逻辑两次。