Mysql 从一个表中选择,而另一个表中有两个条件不正确。可能的

Mysql 从一个表中选择,而另一个表中有两个条件不正确。可能的,mysql,join,Mysql,Join,我被困在我的媒人网站上了。对于已婚夫妇来说,找到其他夫妇进行社交就像电子和谐一样 我试图成为一个好的rdba,我使用了一百万个表,然后使用了许多复杂的连接来提取我想要的信息。但是,我被最后的一个卡住了。我可以在代码中这样做,但我应该可以在SQL中这样做。交易如下: 我正在显示一个成员配置文件页面,其中包含他们的匹配列表。(所有的匹配算法都在运行中)。然后,你可以向某人竖起大拇指或向下竖起大拇指。它在“裁决”数据库中标记了这一点。然后我想刷新会员资料页面,消除投票人 现在,我只展示了4个匹配项,所

我被困在我的媒人网站上了。对于已婚夫妇来说,找到其他夫妇进行社交就像电子和谐一样

我试图成为一个好的rdba,我使用了一百万个表,然后使用了许多复杂的连接来提取我想要的信息。但是,我被最后的一个卡住了。我可以在代码中这样做,但我应该可以在SQL中这样做。交易如下:

我正在显示一个成员配置文件页面,其中包含他们的匹配列表。(所有的匹配算法都在运行中)。然后,你可以向某人竖起大拇指或向下竖起大拇指。它在“裁决”数据库中标记了这一点。然后我想刷新会员资料页面,消除投票人

现在,我只展示了4个匹配项,所以我希望你能够竖起某人的大拇指或者竖起他们的大拇指,然后他们消失,被其他人取代

问题是生成一个sql语句,该语句还检查Decists表

最困难的部分是您的id可能位于两列中的一列:选民或选民

SO, 

    I have these tables and I will list the columns that matter right now:

        couples 
        couples_id

        When a new person signs up, I recalculate the matches table,
    comparing every person with every other person and entering
    a compatibility quotient for each set of couples.:

        matches_couples
        matches_couples_couplea
        matches_couples_coupleb
        matches_couples_matchfactor
        (their compatibility number, I sort by this)

        When a person votes up or down on someone, 
    I enter a row for that vote.
 Who voted, about whom, and (a)ccepted or (r)ejected.:
        verdict_couples
        verdict_c_couplea (the person voting)
        verdict_c_coupleb (the person they're voting about)
        verdict_c_verdict (either 'r' for rejected or 'a' for accepted)
这是我目前正在使用的SQL:

SELECT
*

FROM
match_couples

WHERE
(match_couples_couple_a = '$couples_id'
or
match_couples_couple_b = '$couples_id')

ORDER BY
match_couples_matchfactor desc

LIMIT 4
但是,它没有考虑投票,仍然会显示你拒绝的人,或者已经拒绝你或你批准的人。我想剔除那些拒绝你的人,或者你拒绝的人,或者你认可的人

所以,基本上,如果你曾经做过对联的裁决,我不想包括对联的人,因为你已经对他们做出了决定

如果你是Verdium_c_coubleb,在Verdium_c_裁决中是“r”表示拒绝,我也不想给那个人看

所以,我想要一些超级复杂的JOIN或嵌套EXISTS子句,或者一些能把这些人排除在外的东西(这样,我的限制4仍然有效)

如果不是的话,暴力方法就是取消限制,然后对上面的每一个人,在让他们成为最终列表的一部分之前,进行第二次SQL调用以检查判定表。但这是我希望避免的一个主要阻力

我能够计算出你批准一对夫妇的次数,他们也批准了你——完全匹配。我认为,上述问题的答案隐藏在这个有效的匹配计数SQL中,但我甚至不敢相信我成功了:

SELECT COUNT( * ) AS matches
FROM (
verdict_couples t1
)
JOIN (
verdict_couples same
) ON ( (
t1.verdict_c_couplea = same.verdict_c_coupleb
)
AND (
same.verdict_c_verdict = 'a'
)
AND (
t1.verdict_c_verdict = 'a'
) ) 
WHERE
    same.verdict_c_couplea = '$couples_id' 
    and 
   t1.verdict_c_coupleb = '$couples_id'
基本上,ON子句与WHERE子句交叉,因为您正在寻找:

我要一个对联的判决 你接受我们吗 你接受我们吗

这意味着我们批准了你,你也批准了我们。令人惊讶的是,这是有效的。在那里的某个地方,我有勇气将我的比赛名单限制在那些我还没有投票,也没有拒绝我的人

一旦我弄明白了这一点,我也会将其复制到单独的比赛中

有什么帮助吗


K

为什么这个社区wiki是这样的?好吧,你解决了它!我必须解决一些语法问题才能让它启动(需要在最后加上23个括号),而且表名不准确,但它工作正常!谢谢!!
SELECT *
FROM match_couples m
WHERE 
(m.match_couples_couple_a = '$couples_id'   # we are couple a
  AND m.matches_couples_coupleb NOT IN (    # couple b not in the list of couples which:
                                            # A. we have voted on before
                                        select verdict_c_coupleb 
                                        from verdict_couples
                                        where (verdict_c_couplea = $couples_id) 
                                        UNION
                                            # or B. have rejected us
                                        select verdict_c_couplea 
                                        from verdict_couples
                                        where (verdict_c_coupleb = $couples_id 
                                          AND verdict_c_verdict = 'r'))
OR
(m.match_couples_couple_b = '$couples_id'
  AND m.matches_couples_couplea NOT IN (select verdict_c_coupleb 
                                        from verdict_couples
                                        where (verdict_c_couplea = $couples_id) 
                                        UNION
                                        select verdict_c_couplea 
                                        from verdict_couples
                                        where (verdict_c_coupleb = $couples_id 
                                          AND verdict_c_verdict = 'r')
ORDER BY match_couples_matchfactor desc
LIMIT 4