Как правильно отсортировать?

Есть БД такого вида:
INSERT INTO `tokens` (`id`, `ticker`, `symbol`, `price`, `f_long`, `f_short`, `s_long`, `s_short`, `volume_5m`, `volatility`) VALUES
(22, 'AXS', 'AXSUSDT', 29.74, '30.38000;6957;211353;2.2;08.05.2022 16:46:33;0', '29.00000;11837;343273;2.4;08.05.2022 16:34:34;0', '29.96000000;3685.37000000;110413;0.8;08.05.2022 16:47:39;0', '29.54000000;4505.01000000;133077;0.6;08.05.2022 16:44:33;0', '7834.94000000;233522.11020000', 0.57),
(23, 'BAKE', 'BAKEUSDT', 0.5101, '', '', '', '', '40769.10000000;20803.43380000', 0.39),
(24, 'BAL', 'BALUSDT', 12.725, '', '', '', '', '253.24000000;3219.11980000', 0.16),
(25, 'BAND', 'BANDUSDT', 2.7832, '', '', '', '', '857.90000000;2390.26030000', 0.32),
(26, 'BAT', 'BATUSDT', 0.5528, '', '', '', '0.54920000;299874.00000000;164690;0.5;08.05.2022 16:46:42;0', '20586.00000000;11396.99290000', 0.31),

Вот так я сортирую данные по полю s_short и его 4-му значению
$query_select = mysqli_query($db, "SELECT `scalp`.* FROM `scalp` ORDER BY SUBSTRING_INDEX(SUBSTRING_INDEX(s_short,';',4),';',-1) + 0;");

Сортируется так как мне необходимо и на выходе получаю:

[0] => Array
(
[ticker] => ZIL
[symbol] => ZILUSDT
[price] => 0.04933
[f_long] =>
[f_short] =>
[s_long] =>
[s_short] =>
)

[1] => Array
(
[ticker] => GAL
[symbol] => GALUSDT
[price] => 4.9326
[f_long] =>
[f_short] =>
[s_long] =>
[s_short] =>
)

[2] => Array
(
[ticker] => BTC
[symbol] => BTCUSDT
[price] => 29582.2
[f_long] => 29600.00;15.506;458977;0.1;26.05.2022 17:00:05;1
[f_short] => 29575.20;26.066;770907;0.1;26.05.2022 17:01:05;0
[s_long] => 29620.49000000;8.27571000;245130;0.1;26.05.2022 17:01:06;0
[s_short] => 29600.06000000;4.40067000;130260;0.1;26.05.2022 17:01:06;0
)

[3] => Array
(
[ticker] => FTT
[symbol] => FTTUSDT
[price] => 28.148
[f_long] =>
[f_short] =>
[s_long] => 28.26000000;5347.35000000;151116;0.4;26.05.2022 17:00:10;0
[s_short] => 28.12000000;6394.02000000;179799;0.1;26.05.2022 17:01:10;0
)

[4] => Array
(
[ticker] => GMT
[symbol] => GMTUSDT
[price] => 1.1143
[f_long] =>
[f_short] =>
[s_long] =>
[s_short] => 1.11932000;107109.00000000;119889;0.1;26.05.2022 17:01:13;0
)

Проблема в том, что я в начале получаю пустые записи в поле s_short, а только уже потом с наличием данных в s_short, а мне необходимо наоборот. Чтобы с 0 начинались элементы, которые содержат данные в s_short и отсортированы и уже потом пустые.

Если добавить к запросу DESC, то он ставит элементы как мне надо, но уже в другом порядке от большего к меньшему (сортируя по 4 значению в поле s_short), а мне необходимо от меньшего к большему.
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
BasiC2k
@BasiC2k
.NET developer (open to job offers)
Сздайте в SQL запросе вспомогательное поле, в котором значение будет (например) = 1, если элементы содержат данные в s_short и = 2, если они пустые. И последней сортировкой - сортируйте по этому полю.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект