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×480
- 1024×600
- 1024×768
- 1280×800
- 1280×768
- 1920×1200
- 2048×1536
オペレーティング·システム
- アンドロイド 3.1
- アンドロイド
- BlackBerry タブレット OS
- アンドロイド 3.2
- アンドロイド 2.3
- アンドロイド 4.0
- iOS5
- アンドロイド 4.0.3
- iOS4
- アンドロイド 2.2
- ウィンドウズ 7 プロフェッショナル
- ウィンドウズ8
- ウィンドウズ 8 プロ
- iOS6
ご覧のとおり、インチと解像度は問題ありませんが、オペレーティング システムは適切に並べられていません。ABS を取り外すと、結果は次のようになります。
画面インチ
- 10
- 10.1
- 12.1
- 7
- 7.7
- 7.9
- 8.9
- 9.7
解像度
- 1024×600
- 1024×768
- 1280×768
- 1280×800
- 1366×768
- 1920×1200
- 2048×1536
- 800×480
オペレーティング·システム
- アンドロイド
- アンドロイド 2.2
- アンドロイド 2.3
- アンドロイド 3.1
- アンドロイド 3.2
- アンドロイド 4.0
- アンドロイド 4.0.3
- BlackBerry タブレット OS
- iOS4
- iOS5
- iOS6
- ウィンドウズ 7 プロフェッショナル
- ウィンドウズ8
- ウィンドウズ 8 プロ
ご覧のとおり、オペレーティング システムは適切に注文されていますが、インチと解像度はそうではありません。誰かが私を助けてくれることを願っています :)