2014-10-31 25 views
0

我想在Erlang中編寫一個典型的SQL查詢。我只是想阻止基於此查詢記錄脫機消息。Erlang和Ejabberd中的典型SQL查詢

想把這個查詢放在這個函數的開始處。

store_offline_msg(Host, {User, _Server}, Msgs, Len, MaxOfflineMsgs, odbc) -> 
    Count = if MaxOfflineMsgs =/= infinity -> 
      Len + count_offline_messages(User, Host); 
      true -> 0 
     end, 
    if Count > MaxOfflineMsgs -> discard_warn_sender(Msgs); 

MySQL表

ID | user   | touser   | starttime   | end 
586 | my_gmail.com | touser_gmail.com | 2014-10-29 14:03:16 | 60 

查詢我需要的是檢查:

如果 '用戶' 和 '至用戶' 在這個表中的記錄,和當前時間進來在開始時間和結束時間之間(60秒)

請在這幫我,我欣賞它。

+0

目前尚不清楚是否你問(1)如何寫一個SQL查詢,(2)如何從二郎聊到MySQL,或(3)如何使用SQL查詢的結果影響ejabberd。 – 2014-11-01 18:37:26

+0

我只是想在Erlang編寫這個sql查詢來幫助,這應該是在Ejabberd的方式。我將在SQL中簡單地編寫相同的查詢,然後在erlang中再次編寫它。 – 2014-11-02 12:26:08

回答

1

這是我如何實現它並解決了我的問題。

Check = case catch ejabberd_odbc:sql_query(
      LServer, 
      ["select id from archive_disable_user" 
      " where ((user ='", To, "' " 
      " and tuser='", From , "') " 
      " or (user ='", From, "' " 
      " and tuser='", To , "'))" 
      " and ((UNIX_TIMESTAMP(start) + end) > UNIX_TIMESTAMP()); "]) of 
      {selected, ["id"], Rs} -> 
       Rcheck = len(Rs), 
       if 
       Rcheck == 0 -> 
        false; 
       true->     
        true 
       end;   
      _-> false 
      end,  
    Check.