我有字段名称" codehead"其值如
"53/066/10"
"54/066/05"
"56/066/09"
"52/069/15"
"53/069/02"
"67/069/02"
"00/020/80"
"00/020/98"
我希望结果按以下顺序
"00/020/80"
"00/020/98"
"53/066/05"
"53/066/10"
"54/066/09"
"52/069/15"
"53/069/02"
"67/069/02"
我尝试了像
这样的查询$data= mysql_query("select codehead,sign, SUM(amt) as amt from pm where month='$pmmonth' and rc='R' GROUP BY substr(codehead,4,3) ASC,substr(codehead,7,2) ASC, sign ")
但无法获得完整的结果。
答案 0 :(得分:0)
这个表达式:
substr(codehead,7,2)
返回正斜杠和数字。看起来你想从第8位开始。
但是这不符合显示的顺序,第五行有09
,而前一行的 10
之前会出现。显示的所需结果使得看起来结果也在LEFT(codehead,2)
GROUP BY codehead, `sign`
ORDER BY substr(codehead,4,3) ASC
, LEFT(codehead,2) ASC
, substr(codehead,8,2) ASC
注意:在MySQL的某个未来版本中,GROUP BY
的非标准MysQL扩展名可能会删除ORDER BY
。
我非常怀疑只有子串的GROUP BY
。这是有效的SQL,我只是质疑你想如何处理匹配在子串上的codehead
值,但在其他地方是不同的......特别是考虑到你正在返回codehead
SELECT
列表。
规范模式是GROUP BY
列表中的SELECT
个表达式。
答案 1 :(得分:0)
您可以这样做:
SELECT codehead,
substring(codehead,1,2) as 'one',
substring(codehead,4,3) as 'two',
substring(codehead,8,2) as 'three'
FROM foo
ORDER BY `two`, `one`, `three` ASC
它将工作,但它会有低于平均水平的性能,因为无法使用那种索引。
要解决此问题,您可以向表中添加新字段,例如sortkey
,并为每行插入格式为$two.$one.$three
的字符串。然后你可以对它进行索引和排序。更好的是,将所有三个值拆分到它们自己的字段中,然后您可以根据需要进行索引和排序。