Объедините два запроса mysql в один


Каков правильный синтаксис для объединения этих двух запросов?

SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1

И

SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1

Я пытался:

SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1
UNION
SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1;

Но я получаю "Неправильное использование СОЮЗА и ПОРЯДКА".

РЕДАКТИРОВАТЬ Кроме того, я хочу, чтобы результат возвращался в одной строке. Так что я могу получить доступ к значению в php, например

$row['nextclick'] and $row['topclick'] 

По предложению Саймона, я не должен использовать ОБЪЕДИНЕНИЕ, потому что я хочу вернуть одну строку данных

Author: PutraKg, 2013-01-11

3 answers

Вы не можете ORDER BY в своем первом SELECT, а затем UNION.

Редактировать
Однако вы можете

Примените ПОРЯДОК или ОГРАНИЧЕНИЕ к отдельному ВЫБОРУ, поместите предложение в круглые скобки, которые заключают ВЫБОР:

Как в документации по объединению MySQL

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

, который затем делает ваш SQL

(SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1)
UNION
(SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1);

Редактировать 2
Чтобы вернуться в array

SELECT (SELECT clicks 
        FROM clicksTable 
        WHERE clicks > 199 
        ORDER BY clicks ASC 
        LIMIT 1) AS NextClick,
       (SELECT clicks 
        FROM clicksTable 
        ORDER BY clicks DESC 
        LIMIT 1) AS TopClick;
 12
Author: Simon Martin, 2013-01-11 16:47:39
SELECT clicks FROM
    (SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1) A
UNION
SELECT clicks FROM
    (SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1) B;
 3
Author: Hamlet Hakobyan, 2013-01-11 15:49:54

Во-первых, вы хотите union или union all?

Проблема заключается в order by в первой части. Вы можете исправить это, используя подзапросы:

(select * from (SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1))
UNION ALL
(select * from (SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1))

В выражении union order by допускается только в конце и применяется ко всему выражению.

 1
Author: Gordon Linoff, 2013-01-11 15:51:09