Объедините два запроса 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']
По предложению Саймона, я не должен использовать ОБЪЕДИНЕНИЕ, потому что я хочу вернуть одну строку данных
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;
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;
Во-первых, вы хотите 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
допускается только в конце и применяется ко всему выражению.