마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 채팅 목록 최신순으로 설정하기

0 추천

안녕하세요 : )

 

안드로이드 GCM 을 이용해서 1:1 채팅을 만들고 있습니다.

 

운영자와 다수의 유저들이 각각 운영자와 1:1 채팅을 하는 방식인데,

 

운영자가 사용하는 앱에서는 채팅방 목록을 보여주도록 설정하였습니다.

 

마치 카카오톡 '채팅'탭이랑 같다고 생각하시면 될것같아요.

 

다른건 다괜찮은데 카카오톡 채팅탭처럼 가장 최근에 톡한 사람 순으로 정렬을 하고 싶은데

 

코드를 어떻게 짜야할지 감이 안잡히네요 ㅠ

 

현재 php 랑 mysql 사용해서 데이터 저장하고 있고, 제가 채팅탭 구성한 방식은

 

처음 채팅하기위해 필요한 아이디를 먼저 작성한 순으로 리스트가 정렬됩니다;

 

저는 최신 채팅 작성 시간 순으로 하고 싶은데 php코드를 어떤 방향으로 짜야하나요?ㅠㅠ

 

대충 개념으로만이라도 설명해주시면 감사하겠습니다..;

 

어떤 방식으로 해야할지 도무지 감이 안잡혀요 ㅠㅠ

 

+) 제가 서버 소켓 사용하는법을 도저히 모르겠어서 GCM 으로 한건데  GCM을 이용한 채팅, 단점이 있을까요?

 

 

 

현재 채팅목록에서 사용하고 있는 php 코드입니다

 

$res = mysqli_query($regsqli,"select who from chat_who where who NOT LIKE '운영자' ");

//운영자 빼고 등록된 채팅 아이디 전부 가져오기(chat_who)

 

 

while($result = mysqli_fetch_array($res)){

$res2 = mysqli_query($regsqli,"select name from chat where name LIKE '$result[0]' ORDER by name DESC ") ; // 

$result2 = mysqli_fetch_array($res2); // 운영자를 제외한 상대방 저장

 

$res3 = mysqli_query($regsqli,"select name from chat where name LIKE '$result[0]' OR who LIKE '$result[0]' ORDER by time DESC ") ; // 

$result3 = mysqli_fetch_array($res3); // 1:1 채팅에서 누가 마지막으로 채팅했는지

 

$res4 = mysqli_query($regsqli,"select content from chat where name LIKE '$result[0]' OR who LIKE '$result[0]' ORDER by time DESC ") ; // 그 사람의 최근 대화 or 시간 , content순이면 숫자,글자순으로 정렬된다. 따라서 시간순으로 정렬

$result4 = mysqli_fetch_array($res4); // res4 은 1:1에서 마지막으로 대화한 사람 내용 저장 (유저 or 운영자)

 

$res5 = mysqli_query($regsqli,"select time from chat where name LIKE '$result[0]' OR who LIKE '$result[0]' ORDER by time DESC ") ; 

$result5 = mysqli_fetch_array($res5); //1:1에서 마지막 채팅 작성 시간 저장

 

 

 array_push($Re,  

    array('name'=>$result2[0] , 'last_who'=>$result3[0], 'last_content'=>$result4[0]  ,'last_time'=>$result5[0]

    )); 

    }

 

echo json_encode(array("little_known"=>$Re));

익명사용자 님이 2016년 6월 19일 질문

1개의 답변

0 추천
 
채택된 답변
음...채팅방 순서 정렬은 대개 채팅방 테이블이 따로 있습니다.

그 채팅방에 챗이 생기면 그때마다 update_date같은 게 변경이 되죠. 그래서 말씀하시는 부분을 구현할 때는 단순히 채팅방을 update_date 최신 순으로 보여주면 됩니다

위에 보여주신 코드를 봐서는(아~ 전 PHP를 몰라서 그냥 그러려니 이해했습니다. 오해의 여지가 많습니다) 별도로 채팅방 테이블은 없는 것 같네요. 매번 챗마다 뒤지려면 꽤 비효율적이겠네요(테스트나 졸업작품 같은 거라면 몰라도, 상용 서비스에서는 기피해야  할 방식으로 보입니다)

 

GCM으로 챗을 만드는 것의 단점이라면, GCM같은 건 유실될 가능성이 있다는 겁니다.

따라서 유실된 게 없는지 메세지들의 순서는 잘 맞는지에 대한 싱크가 필요합니다.
cc1232 (35,280 포인트) 님이 2016년 6월 20일 답변
정말 감사합니다 ! 그런방법이 있었네요!  :) GCM 관한 조언도 감사합니다!
...