我需要在 MySQL 查询中使用 order by 订购一些信息。只有当第一个字符是数字时,是否有可能使用 ABS 函数?
伪示例:
SELECT * FROM table
ORDER BY
(( name[0] = numeric ) ? ABS(name) : name)
ASC
感谢您到目前为止的答案,尝试了很多您的答案,但我没有得到我想要的结果。
当前代码:
<?php
$filters = $this->db->query("
SELECT
tb_spec_feature.feature_id,
tb_spec_feature.name
FROM
tb_spec_feature
WHERE
filter=1
");
$filters = $filters->result_array();
foreach($filters as $key=>$filter)
{
$filters_sub = $this->db->query("
SELECT DISTINCT
tb_spec_value.value_id,
tb_spec_value.name as value_name,
tb_spec_sign.name as sign_name
FROM
tb_spec_fk
INNER JOIN
tb_spec_value
ON
tb_spec_value.value_id = tb_spec_fk.value
LEFT JOIN
tb_spec_sign
ON
tb_spec_sign.sign_id = tb_spec_fk.sign
WHERE
feature=".$this->db->escape($filter['feature_id'])."
ORDER BY
ABS(tb_spec_value.name) ASC
");
$filters[$key]['values'] = $filters_sub->result_array();
}
?>
这将输出(tb_spec_feature.name,然后是 tb_spec_value.name):
屏幕英寸
- 7
- 7.7
- 7.9
- 8.9
- 9.7
- 10
- 10.1
- 12.1
解析度
- 800 x 480
- 1024×600
- 1024 x 768
- 1280 x 800
- 1280 x 768
- 1920 x 1200
- 2048 x 1536
操作系统
- 安卓 3.1
- 安卓
- 黑莓平板操作系统
- 安卓 3.2
- 安卓 2.3
- 安卓4.0
- iOS 5
- 安卓 4.0.3
- iOS 4
- 安卓 2.2
- 视窗 7 专业版
- 视窗 8
- 视窗 8 专业版
- iOS 6
如您所见,英寸和分辨率都还可以,但操作系统的排序不好。如果我删除 ABS,结果将是:
屏幕英寸
- 10
- 10.1
- 12.1
- 7
- 7.7
- 7.9
- 8.9
- 9.7
解析度
- 1024×600
- 1024 x 768
- 1280 x 768
- 1280 x 800
- 1366 x 768
- 1920 x 1200
- 2048 x 1536
- 800 x 480
操作系统
- 安卓
- 安卓 2.2
- 安卓 2.3
- 安卓 3.1
- 安卓 3.2
- 安卓4.0
- 安卓 4.0.3
- 黑莓平板操作系统
- iOS 4
- iOS 5
- iOS 6
- 视窗 7 专业版
- 视窗 8
- 视窗 8 专业版
正如您现在所看到的,操作系统的顺序很好,但英寸和分辨率却没有。我希望有人能帮助我:)