что я делаю неправильно здесь, поскольку я пытаюсь получить все выходы из обоих запросов ниже в 1 запросе, т.е.
кол (centerpoint_stream_stable), дата, website_online, icecast_source_online, icecast_source_ip, icecast_no_listeners, centerpoint_online, centerpoint_connection, centerpoint_stream_stable, centerpoint_stream_status, horsleypark_online, horsleypark_connection, horsleypark_stream_stable, horsleypark_stream_status, local_primary_internet_online, local_primary_internet_ping, local_primary_instreamer_online, local_secondary_internet_online, local_secondary_internet_ping, local_secondary_instreamer_online, system_ok 2 запросов я хотел бы к союзу
select count(centerpoint_stream_stable) from status_log where centerpoint_stream_stable = 'Disconnected/ Reconnected to Stream' and date > date_sub(now(), interval 1 minute) ;
а также
SELECT date, website_online, icecast_source_online, icecast_source_ip, icecast_no_listeners, centerpoint_online, centerpoint_connection, centerpoint_stream_stable,centerpoint_stream_status, horsleypark_online, horsleypark_connection,horsleypark_stream_stable,horsleypark_stream_status, local_primary_internet_online,local_primary_internet_ping, local_primary_instreamer_online,local_secondary_internet_online,local_secondary_internet_ping,local_secondary_instreamer_online,system_ok FROM status_log ORDER BY id DESC LIMIT 1;
объединение обоих запросов, приведенных выше, дает следующую ошибку;
ОШИБКА 1248 (42000): Каждая производная таблица должна иметь свой собственный псевдоним
(select * from (select
date,
website_online,
icecast_source_online,
icecast_source_ip,
icecast_no_listeners,
centerpoint_online,
centerpoint_connection,
centerpoint_stream_stable,
centerpoint_stream_status,
horsleypark_online,
horsleypark_connection,
horsleypark_stream_stable,
horsleypark_stream_status,
local_primary_internet_online,
local_primary_internet_ping,
local_primary_instreamer_online,
local_secondary_internet_online,
local_secondary_internet_ping,
local_secondary_instreamer_online,
system_ok
FROM status_log ORDER BY id DESC LIMIT 1))
union all
(select * from (select count(centerpoint_stream_stable) from status_log where centerpoint_stream_stable = 'Disconnected/ Reconnected to Stream' and date > date_sub(now(), interval 1 minute) ));
Круглые скобки используются для подзапросов, и тогда вы должны дать каждому подзапросу псевдоним, как это предлагает ошибка. Пример:
(SELECT id FROM table1) a
UNION
(SELECT id FROM table2) b
Что еще более важно, когда вы используете UNION
, все поля в обоих запросах должны точно совпадать. У ваших запросов есть совершенно разные поля.
EDIT UNION
- это добавить результаты первого запроса к результатам второго запроса. В вашем случае вы не пытаетесь добавить результаты вместе, вы пытаетесь добавить поля вместе. Для этого вы можете использовать соединения или подзапросы. Попробуйте это с помощью дополнительных запросов:
SELECT (SELECT COUNT (s2.centerpoint_stream_stable)
FROM status_log s2
WHERE s2.id = s.id
AND s2.centerpoint_stream_stable = 'Disconnected/ Reconnected to Stream'
AND s2.date > date_sub(NOW(), INTERVAL 1 MINUTE)) AS my_count,
s.date, s.website_online, s.icecast_source_online, s.icecast_source_ip,
s.icecast_no_listeners, s.centerpoint_online, s.centerpoint_connection,
s.centerpoint_stream_stable, s.centerpoint_stream_status, s.horsleypark_online,
s.horsleypark_connection, s.horsleypark_stream_stable, s.horsleypark_stream_status,
s.local_primary_internet_online, s.local_primary_internet_ping,
s.local_primary_instreamer_online, s.local_secondary_internet_online,
s.local_secondary_internet_ping, s.local_secondary_instreamer_online, s.system_ok
FROM status_log s
ORDER BY id DESC
LIMIT 1;
Я сделал ваш первый запрос в качестве подзапроса. Это дает вам первое поле счетчика. Я назвал его my_count
, но вы можете изменить его на все, что захотите.
Чтобы объединить два запроса вместе, вам необходимо предоставить условие соединения, поэтому я добавил условие s2.id = s.id
к вашему первому запросу.
Я не знаю, почему у вас есть LIMIT 1
в конце вашего второго запроса. Это даст вам одну запись с самым большим id
.
order by
или limit
.
(select * from t) as alias_table_name