쿼리에 대해 질문드립니다. 채택완료
현재 쿼리문
-- 메모 관련 쿼리입니다.
select a.*, CONCAT(a.me_recv_mb_id,a.me_send_mb_id) AS chat_name
from g5_memo a
left join g5_member b on (a.me_send_mb_id = b.mb_id)
where a.me_recv_mb_id = '내아이디' or a.me_send_mb_id = '내아이디'
GROUP BY chat_name
order by a.me_id desc limit 0, 20
chat_name 으로 group by 해서 묶을려고 하는되요
chat_name결과
내아이디상대방아이디
상대방이이디내아이디
참고로, 상대방 아이디는 같습니다.
이렇에 되니
1개로 안 묶이고, 2개로 출력이 됩니다. 혹시 방법이 있을까요?
고수님들 의견 부탁드립니다.
답변 4개
</p>
<p>SELECT a.*, CONCAT(
LEAST(a.me_recv_mb_id, a.me_send_mb_id),
GREATEST(a.me_recv_mb_id, a.me_send_mb_id)
) AS chat_name
FROM g5_memo a
LEFT JOIN g5_member b ON (a.me_send_mb_id = b.mb_id)
WHERE a.me_recv_mb_id = '내아이디' OR a.me_send_mb_id = '내아이디'
GROUP BY chat_name
ORDER BY a.me_id DESC LIMIT 0, 20
이렇게 쿼리 해보세요.
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
select a.*, CONCAT(a.me_recv_mb_id,a.me_send_mb_id) AS chat_name
from g5_memo a left join g5_member b on (a.me_send_mb_id = b.mb_id)
where a.me_recv_mb_id = '내아이디' or a.me_send_mb_id = '내아이디'
GROUP BY chat_name
order by a.me_id desc limit 0, 20
==
왜 join이 필요 한지 모르겠네요.
B 테이블은
select, where, order by
어디에도 안 쓰이는데요.
where에 sender가 고정이면
group by는 필요 없고
Concat()대신
Group_concat()쓰시면 됩니다.
Order by me_od는 의미가 없습니다.
답변에 대한 댓글 5개
group by를 쓰신 거면
Concat() 안에 Distinct 쓰시면 됩니다.
https://mariadb.com/kb/en/group_concat/
select * from ( select 'recv' type, group_CONCAT( distinct b.mb_name) AS chat_name from g5_memo a Inner join g5_member b on a.me_send_mb_id = b.mb_id) where a.me_recv_mb_id = '내아이디' Union
select 'send' type, group_CONCAT(distinct b.mb_name) AS chat_name from g5_memo a Inner join g5_member b on a.me_send_mb_id = b.mb_id) where a.me_send_mb_id = '내아이디') Atbl
리스트 페이지에서 상대방 아이디가 1개만 보이게 처리 할려고 합니다.
== 이미 where에 내 아이디 조건이 있어서 필요 없을 듯하구요
리스트 페이지에서 상대방 아이디가 1개만 보이게 처리 할려고 합니다.
== 한 개만" 이면 limit를 사용하세요
댓글을 작성하려면 로그인이 필요합니다.
where에 내아이디 조건이 있으니 concat가 필요 없겠습니다
상대방 아이디만 추출해오면 되는거죠
select a.*, if(a.me_recv_mb_id ='내아이디', a.me_send_mb_id, a.me_recv_mb_id) chat_name
답변에 대한 댓글 1개
감사합니다. ^^
댓글을 작성하려면 로그인이 필요합니다.
</p>
<p>
SELECT * FROM (
SELECT 'send' TYPE, CONCAT(c.me_recv_mb_id, c.me_send_mb_id) chat_name, c.*
FROM g5_memo c
WHERE c.me_recv_mb_id = 'admin' -- 받은 사람만 체크하면됨
GROUP BY chat_name
UNION ALL
SELECT 'recv' TYPE, CONCAT(c.me_send_mb_id, c.me_recv_mb_id) chat_name, c.*
FROM g5_memo c
WHERE c.me_send_mb_id = 'admin' -- 받은 사람만 체크하면됨
GROUP BY chat_name
) c
ORDER BY c.me_id DESC LIMIT 0,20</p>
<p>
이렇게 해보시면 어떨까요?
type은 보낸메세지인지, 받은메세지인지 구분하는 용도입니다.
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인