Я хочу добиться следующего. У меня есть приложение, которое использует чаты, и я хочу показать вошедшему в систему пользователю его чаты, в которых он участвует. У меня есть таблица с именем: - CHAT_USER, где я храню идентификатор разговора и пользователя и - CHAT, где у меня есть Тема и другая информация. Мой подход заключается в том, чтобы получить список идентификаторов чата, сначала выбрав то, что я получил из параметров, а затем использовать этот вывод для создания представления с активными чатами.
DELIMITER $$
CREATE DEFINER=`mysql`@`%` PROCEDURE `GetChats`(
IN userName VARCHAR(60),
IN ticket INT)
NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER
BEGIN
SELECT
( select `CHAT_USER_ID`, `CHAT_ID`, `TICKET_ID`, `USER` from `CHAT_USER`
where `USER`= userName and `TICKET_ID` = ticket ) as ChatsForUser ,
(select `r`.`CHAT_ID` ,
`l`.`CHAT_TYPE` ,
`r`.`TICKET_ID`,
group_concat(`r`.`USER` separator ',') AS `USER`,
`l`.`IS_PUBLIC` ,
`r`.`IS_ACTIV` ,
`l`.`CHAT_TOPIC`
from (`CHAT_USER` `r` left join `CHAT` `l` on((`r`.CHAT_ID` = `l`.`CHAT_ID`)))
where ((`r`.`IS_ACTIV` = '1') and (`r`.`USER_TYPE` <> 'INITIATOR'))
group by `r`.`CHAT_ID` having `r`.`CHAT_ID` IN ChatsForUser.`CHAT_ID`) as OutputChats;
COMMIT;
END$$
DELIMITER ;
Дополнительная информация:
Table CHAT_USER
===========================================================
CHAT_USER_ID | CHAT_ID | TICKET_ID | USER | ...other fields
===========================================================
Table CHAT
============================================================================
CHAT_ID | TICKET_ID | CHAT_TYPE | CHAT_TOPIC | IS_ACTIV | IS_PUBLIC | other fields
============================================================================
I want an output that will have this:
===============================================================
CHAT_ID | TICKET_ID | USERS | IS_ACTIV | IS_PUBLIC | CHAT_TOPIC
===============================================================
УСЛОВИЯ: для отображения активных CHAT_ID на БИЛЕТЕ, где зарегистрированный пользователь участвует в разговоре. Пример вывода должен возвращать только первые 2 строки, потому что в обсуждениях участвует ME:
12 | 234 | me, user1, user 4 | 1 | 1 | Problem 1
14 | 234 | me, user56, user 9 | 1 | 1 | Problem 233
19 | 234 | user44, user 19 | 1 | 1 | Problem 12
22 | 234 | user33, user 22 | 1 | 1 | Problem 230
Возможно ли это? Если нет, можете дать какие-нибудь идеи, как этого добиться? Заранее спасибо!