Mysql加入线程收件箱

时间:2013-10-15 16:41:08

标签: mysql join case

我正在建立一个类似于系统的Facebook线程。

我的问题是当conv_fromidconv_toid与登录的用户ID相同时, 它打印错误的用户名。所以我正在寻找某种切换方法。我不知道你/我是否可以使用sql案例?

基本上问题是:

  • 当登录的userid等于conv_fromid时,需要根据conv_toid加入pub_users(不再是conv_fromid)
  • 如果登录的用户ID等于conv_toid,则需要根据conv_fromid加入pub_users。

我的要求:

SELECT * FROM pub_conversations a
        INNER JOIN pub_users b
            ON a.conv_toid = b.user_id
        WHERE conv_fromid ='". get_uid() ."'
        OR conv_toid='". get_uid() ."'

那么输出应该是什么,是登录用户与之对话的所有用户的列表

http://sqlfiddle.com/#!2/feb21

2 个答案:

答案 0 :(得分:1)

SELECT * FROM pub_conversations a
        INNER JOIN pub_users b
          ON a.conv_toid = b.user_id AND conv_fromid ='". get_uid() ."'
          OR a.conv_toid='". get_uid() ."' 

我不确定今晚是否有大脑融化:

SELECT * FROM pub_conversations a
        INNER JOIN pub_users b
          ON a.conv_toid = b.user_id AND conv_fromid ='". get_uid() ."'
          OR a.conv_toid='". get_uid() ."' AND conv_fromid != b.user_id


SELECT * FROM pub_conversations a
        INNER JOIN pub_users b
            ON b.user_id =(
CASE
 WHEN `conv_fromid`='". get_uid() ."' THEN `conv_toid`
 WHEN  `conv_toid`='". get_uid() ."' THEN `conv_fromid` ELSE -1 
END
)

答案 1 :(得分:0)

结束使用

SELECT * FROM pub_users a, pub_conversations b
    WHERE (CASE WHEN b.conv_fromid = ". get_uid() ." THEN b.conv_toid ELSE b.conv_fromid END) = a.user_id

非常感谢您的时间:)