Как вы заказываете UNION в MySQL? - PullRequest
0 голосов
/ 02 ноября 2011

Я хотел бы знать, как мы можем упорядочить список (DESC) в mysql_query, основанном на объединении. Мы получаем вывод при получении этого запроса в PHP / MYSQL. но мы просто помещаем порядок в этом запросе.

 (SELECT info.id 
 FROM info, 1_all 
 WHERE 1_all.id = info.id and 1_all.table_type = 'disp'  AND 1_all.year = '$year' AND  info.category IN (1,2,3) AND info.area IN (2,5,6)  
 GROUP BY resinfo.id ) 
UNION ALL 
 (SELECT info.id 
 FROM info, 2_all 
 WHERE 2_all.id = info.id and 2_all.table_type = 'disp' AND 2_all.year = '$year' AND info.category IN (1,2,3) AND info.area IN (2,5,6) 
 GROUP BY info.id)

Ответы [ 3 ]

4 голосов
/ 02 ноября 2011

Чтобы использовать предложение ORDER BY или LIMIT для сортировки или ограничения всего результата UNION, заключите в скобки отдельные операторы SELECT и поместите ORDER BY или LIMIT после последнего.В следующем примере используются оба предложения:

(SELECT a FROM t1 WHERE a=10 AND B=1)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;

http://dev.mysql.com/doc/refman/5.5/en/union.html

0 голосов
/ 02 ноября 2011

Я не знаю, принимает ли движок MySQL его, но другие движки, такие как SQL Server, позволяют вам добавлять заказ по предложению в конце:

SELECT info.id 
 FROM info, 1_all 
 WHERE 1_all.id = info.id and 1_all.table_type = 'disp'  AND 1_all.year = '$year' AND      info.category IN (1,2,3) AND info.area IN (2,5,6)  
 GROUP BY resinfo.id
UNION ALL 
 SELECT info.id 
 FROM info, 2_all 
 WHERE 2_all.id = info.id and 2_all.table_type = 'disp' AND 2_all.year = '$year' AND     info.category IN (1,2,3) AND info.area IN (2,5,6) 
 GROUP BY info.id
ORDER BY info.id DESC;

Если ваш движок базы данных не принимаетэто, возможно, лучше всего создать представление на основе вашего запроса объединения, а затем запросить это представление с вашим заказом по.

0 голосов
/ 02 ноября 2011

Вы можете сделать подзапрос, например так:

SELECT info.id
FROM
(
  (SELECT info.id 
   FROM info, 1_all 
   WHERE 1_all.id = info.id and 1_all.table_type = 'disp'  AND 1_all.year = '$year' AND     info.category IN (1,2,3) AND info.area IN (2,5,6)  
   GROUP BY resinfo.id ) 
  UNION ALL 
  (SELECT info.id 
   FROM info, 2_all 
   WHERE 2_all.id = info.id and 2_all.table_type = 'disp' AND 2_all.year = '$year' AND info.category IN (1,2,3) AND info.area IN (2,5,6) 
   GROUP BY info.id)
) as all
order by id desc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...