在或的结果上使用OR和right连接的mysql查询

在或的结果上使用OR和right连接的mysql查询,mysql,join,Mysql,Join,我正在为一个新网站编写一个内部/私人消息/电子邮件系统,到目前为止进展非常顺利,但我遇到了一个障碍。。。垃圾箱文件夹 我需要做一个包含所有记录的查询,其中字段(a和b)=一个设置或(x和y)=另一个设置,然后在用户表上右键连接该记录,这样我就可以知道是谁创建了记录/消息 以下是我所拥有的: SELECT * FROM mail AS M RIGHT JOIN users AS U on U.userid = M.frm_userid or M.to_userid /* result of WHE

我正在为一个新网站编写一个内部/私人消息/电子邮件系统,到目前为止进展非常顺利,但我遇到了一个障碍。。。垃圾箱文件夹

我需要做一个包含所有记录的查询,其中字段(a和b)=一个设置或(x和y)=另一个设置,然后在用户表上右键连接该记录,这样我就可以知道是谁创建了记录/消息

以下是我所拥有的:

SELECT * FROM mail AS M
RIGHT JOIN users AS U on U.userid = M.frm_userid or M.to_userid /* result of WHERE */
WHERE (frm_userid='$userid' AND frm_status=3) OR (to_userid='$userid' AND to_status=3) 
ORDER BY some_date_field DESC
我被卡在了正确的连接上。userid=我没有任何线索!我肯定有办法做到这一点,但我只是不太了解MYSQL,无法实现这一点

有什么建议吗

谢谢


Pete

将TO和TO处理分离到联合体的不同部分:

SELECT M.to_userid FROM mail AS M
JOIN users AS U on U.userid = M.frm_userid and M.frm_status=3
WHERE M.frm_userid = '$userid'
UNION
SELECT M.frm_userid FROM mail as M
JOIN users AS U on U.userid = M.to_userid and M.to_status=3
WHERE M.to_userid = '$userid'
ORDER BY some_date_field DESC
试试这个

 SELECT 
         * 
    FROM 
         mail AS M
    RIGHT JOIN 
         users AS U on (U.userid = M.frm_userid or U.userid = M.to_userid)
    WHERE 
         (frm_userid='$userid' AND frm_status=3) OR (to_userid='$userid' AND to_status=3) 
    ORDER BY 
         some_date_field DESC

我曾经考虑过/尝试过IN语句,但问题是它两次返回相同的记录。我更新了查询以使用UNION-我认为这将删除重复项,并且可能会执行得更好。“或”表达式通常很慢。这很好,但我认为我需要反转它们,以便首先使用to_userid。。。如果不是“我”,我想显示发件人姓名;如果不是“我”,则显示收件人姓名frm\u user=“me”;如果是发送,则显示收件人姓名;如果是发送,则显示收件人姓名frm\u user=“me”。有意义吗?我使用了您最初的解决方案,并编辑了代码以反映它的工作原理,我只是勉强完成了其余部分。。。今天早上5点50分我到了那里。