2013-04-09 4 views
0

У меня есть таблица с 4 VARCHAR полей, что мне нужно заказать на основе если столбцы являются пустымизаказа MySQL многократного COALESCE (CAST

Так что моя таблица структуры:.

start_price  reserve_price  buy_now_price current_bid_amount 
--------------------------------------------------------------------- 
50.00   50.00    empty (not null) (Null) 
190    190    empty (not null) (Null) 
150    150    empty (not null) (Null) 
20    150    empty (not null) (Null) 
550    600    empty (not null) (Null) 

У меня есть оговорка порядок ниже, но не похоже, чтобы правильно заказать. на данный момент результаты упорядочены 190, 150, 50, 20, 550.

ORDER BY COALESCE (CAST (al. current_bid_amount как знаковые), CAST (al. buy_now_price как знаковые), CAST (al. start_price А.С. ПОДПИСАНА), CAST (al. reserve_price как знаковые)) ASC

В основном нужно упорядочить по возрастанию на основе current_bid_amount, buy_now_price, Начальная_цена, reserve_price. Поэтому, если current_bid_amount AND buy_now_price пуст, используйте start_price. Если current_bid_amount пуст, а buy_now_price - нет, используйте buy_now_price. Если в current_bid_amount есть значение, используйте это для заказа.

Большое спасибо.

+0

В настоящее время происходит то, что происходит – zod

ответ

1

Ну, выбирая пустую строку в подписанное значение 0. Таким образом, ваша buy_now_price, вероятно, переопределит все, так как она пуста, но не null. Затем вы по существу не сортируете, так как ваш coalece всегда будет оценивать значение 0 для всех ваших предметов.

mysql> select cast('' as signed); 
+--------------------+ 
| cast('' as signed) | 
+--------------------+ 
|     0 | 
+--------------------+ 
1 row in set, 1 warning (0.00 sec) 

mysql> select cast(null as signed); 
+----------------------+ 
| cast(null as signed) | 
+----------------------+ 
|     NULL | 
+----------------------+ 
1 row in set (0.00 sec) 
+0

У меня было ощущение, что это было бы так. Есть ли способ игнорировать столбец, если он пуст? или я должен обновить свой код до нулевого значения, а не оставить его пустым? – puks1978

+0

Использование null сделает это проще или вы можете сделать коалесценцию по всем значениям с очень большим значением и принять минимальное или отрицательное значение и принять max. Однако все они будут представлять проблемы, поскольку вы не сможете использовать какие-либо индексы. Лучшим способом было бы поддерживать «столбец заказа», который никогда не будет равным нулю и представляет номер, который вы хотите отсортировать, а затем вы также можете индексировать. –

+0

Спасибо. Я буду применять ваше предложение. – puks1978