2014-10-06 4 views
0

У меня есть две таблицы, которые полностью различаются по полю и данным, но я хочу отсортировать данные из обеих таблиц. У меня есть предложение union union для этой цели, и мне удастся получить набор результатов, но не удается сортировать данные. Я пробовал так много трюков, но терпел неудачу.Сортировка набора результатов объединения двух таблиц в mysql

Мой запрос -

(SELECT amount FROM `purchase` order by amount desc limit 0, 10) 
UNION 
(SELECT total_price as amount from `item` order by total_price desc limit 0, 10) order by amount desc 

результат -

----------- 
amount 
----------- 
9999.000 
9998.000 
999.000 
9730 
7750 
7700 
7600 
6881 
20000 
13400 
10250 
10000 

В результате в порядке, но вы можете видеть, что данные не сортировать по количеству, сортируется по таблице. Но я хочу наивысшего уровня в верхней части 20000 и так далее. Может ли кто-нибудь сказать мне, какое изменение я должен внести в запрос для достижения результата.

ответ

0

Это кажется, что одна из (или обоих) amount и total_price является тип текста. Как насчет актеров, как это:

(SELECT amount + 0 AS amount FROM `purchase` order by amount desc limit 0, 10) 
UNION 
(SELECT total_price + 0 AS amount from `item` order by total_price desc limit 0, 10) 
ORDER BY amount desc 

Если xxx + 0 не работает, используйте CAST(total_price AS SIGNED INTEGER).

+0

Прежде чем идти дальше, не могли бы вы объяснить мне.? что это + 0 делает здесь и как это влияет на мои данные? @ InoS Heo –

+0

@ThePlusProgrammer Это общий трюк в MySQL (или PHP), который не форсирует строгий тип данных. Использование функции 'CAST()' является стандартным способом преобразования типа данных. –

+0

сумма - тип varchar и total_price - тип int –

0

Попробуйте этот запрос:

SELECT * 
FROM  ( 
      SELECT cast(amount AS DECIMAL(10,2)) as amount 
      FROM `purchase` limit 0, 10 
      UNION 
      SELECT total_price AS amount 
      FROM `item` limit 0, 10) a 
ORDER BY amount DESC 

SAMPLE DEMO

+0

Извините @Manwal Не сделано. все результаты сортировки полностью совпадают с совпадениями –

+0

Как насчет создания [SqlFiddle] (http://sqlfiddle.com/)? – Manwal

+0

В очень простых словах запрос для достижения этого, некоторые данные из одной таблицы и некоторые данные из второй таблицы по условию limit, объединяют все данные и сортировку с максимальным значением. –

Смежные вопросы