Слияние вложенных подзапросов

Armageddance

Новичок
Есть вот такой запрос, он возвращает ФИО администраторов, чьи ID есть в исходящих или входящих сообщениях у авторизованного администратора.
Собственно, подскажите как мне объединить подзапросы в один столбик, вроде простая задача, но знаний не хватает чтобы справиться.

PHP:
SELECT admin_fio FROM admin WHERE admin_id IN((SELECT DISTINCT message_from FROM messages
                            WHERE message_from = @current_admin_id OR message_to = @current_admin_id) AND (SELECT DISTINCT message_to FROM messages
                            WHERE message_from = @current_admin_id OR message_to = @current_admin_id))
Интуиция подсказывает, что надо AND на что-то заменить, а на что не соображу.
 

antson

Новичок
Партнер клуба
union ['juːnjən] сущ. - объединение, слияние
 

Armageddance

Новичок
PHP:
(SELECT admin_fio FROM admin WHERE admin_id IN(SELECT DISTINCT message_from FROM messages
                            WHERE message_from = @current_admin_id OR message_to = @current_admin_id))
                            UNION (SELECT admin_fio FROM admin WHERE admin_id IN(SELECT DISTINCT message_to FROM messages
                            WHERE message_from = @current_admin_id OR message_to = @current_admin_id))
Вот в такой форме заработало. Первоначально пытался применить UNION к подзапросам, но неудачно. И все-таки, мне кажется, это какой-то неправильный способ, хак своего рода...
 

Armageddance

Новичок
PHP:
(SELECT admin_fio, admin_id FROM admin WHERE admin_id IN(SELECT DISTINCT message_from FROM messages
                            WHERE message_from = @current_admin_id OR message_to = @current_admin_id ORDER BY date_sent LIMIT 10))
                            UNION (SELECT admin_fio, admin_id FROM admin WHERE admin_id IN(SELECT DISTINCT message_to FROM messages
                            WHERE message_from = @current_admin_id OR message_to = @current_admin_id ORDER BY date_sent LIMIT 10))
Попробовал лимитировать и упорядочивать подзапросы, но столкнулся с такой вот ошибкой
#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Как еще можно попробовать лимитировать запросы по количеству?
 

antson

Новичок
Партнер клуба
Armageddance
формулируй для себя правильно задачу, а не методом перебора решай.
Нужно ФИО администраторов, чьи ID есть в исходящих или входящих сообщениях у конкретного админа.
шаг 1. получить ид из переписки контрагентов
select кому as код_админа from переписка where откого=@админ union select откого from переписка where кому=@админ
шаг 2 . Раскрыть ид админов в фио
шаг 3. Соединить 1 и 2 в один запрос можно разными способами . Н-р
a) select фио from админы where [id in | id=ANY](запрос шага 1)
b) select (select фио from админы where админы.id=шаг1.id) as фио from (...) шаг1
c) варианты через join
d) варианты через from t1,t2 where

пробуй сравнивай explainы , время исполнения.

а вот на блюдечке . запроса не дам. учитесь
 

prolis

Новичок
Код:
select if(@current_admin_id=message_from,message_to, message_from) as admin_id,
 date_sent
 from messages
 where @current_admin_id in (message_from,message_to)
 
Сверху