2016-08-25 3 views
-2

У меня возникла одна проблема с выбором данных из mysql, и я не могу понять это. Попытайтесь делать исследования, но не повезло.Mysql - выбор и заказ по двум столбцам цены как один

У меня есть таблица с 4-мя столбцами:

id | name | price | discount_price 
1 | Test 1 | 150 | 50 
4 | test 2 | 130 | 300 
2 | test 3 | 200 | 0 
3 | test 4 | 130 | 10 
4 | test 5 | 80 | 0 

И мне нужно, чтобы выбрать данные и заказать их по цене, и если discount_price не «ZERO», чем заказ по price_discount. Проблема в том, что теперь она работает не так, как я ожидал. Он показывает результаты при сортировке первого столбца и, в конце концов, сортируется второй столбец. Зависит от выбора ASC или DESC.

Мне нужно что-то достичь, чтобы объединить эти две колонки в одну, а не сортировку. Например:

id | name | price | discount_price 
3 | test 4 | 130 | 10* 
4 | test 5 | 80* | 0 
1 | Test 1 | 150 | 50* 
2 | test 3 | 200* | 0 
4 | test 2 | 130 | 300* 

Возможно ли это в mysql? Или следует сортировать это позже в php? Спасибо за помощь.

+0

10,80,50,200,300 не имеет особого смысла (по крайней мере, для меня). – Vatev

+1

Тот же вопрос у меня есть, как вы можете сделать ненужную сортировку. 10,80,50,200,300. Это также мне не имеет никакого смысла. если хотите 10,50,80,200,300. Затем вы можете получить из нижеследующего запроса: 'Выберите идентификатор, имя, цена, discount_price, if (discount_price = 0, price, discount_price) как sort_order FROM table order by sort_order ASC' – Manish

+0

Разве вы не просили этого вчера, никто отмените ваши требования, и вопрос был удален. – RiggsFolly

ответ

0

Попробуйте это (определения полей в создании таблицы являются псевдокод):

CREATE TEMPORARY TABLE sort (id INT, name VARCHAR, INT price, INT discount_price, INT actual_price) ; 
INSERT INTO sort (id, name, price, discount_price) 
    SELECT id, name, price, discount_price 
    FROM original_table ; 
UPDATE sort SET actual_price = price WHERE discount_price = 0 ; 
UPDATE sort SET actual_price = discount_price WHERE discount_price != 0 ; 
SELECT id, name, price, discount_price FROM sort ORDER BY actual_price ; 
Смежные вопросы