加入两个表,其中第二个

时间:2018-02-05 16:42:15

标签: php mysql

好的,我知道它必须比我经历的要简单得多......

在一张桌子上,我有可供玩家注册的课程,另一方面,一旦你注册,我在那里注册了玩家。现在,问题在于我想要选择所有公共类和注册类,其中玩家可能或可能不在之前。

如果玩家离开班级,为了保留他们的数据,第二个表只是在注册时将字段更新为“out”,这样的字段显示为“in”

SELECT * FROM k3_pwl_br_classes a 
    JOIN k3_pwl_br_player_class b 
    ON a.class_id=b.class_id 
    WHERE
    (a.class_privacy = 'public')
    OR (b.player_id=51 AND b.player_class_status='in')
    OR (b.player_id=51 AND b.player_class_status='out' AND a.class_privacy='public')
    OR (a.class_owner=51 AND b.player_id=51)

    ORDER BY a.class_title, a.class_id

结果是任何可能的组合,所以我在数据库中有3个用户,他们在1级注册但未注册2级

玩家1拥有属于PUBLIC的第1类 玩家46拥有PUBLIC的第2类 玩家51拥有NO级别。

玩家1和46在他们的课程中注册 玩家51在第2课中注册(player_class_status =“in”)但是留下了第1级(player_class_status ='out')

当您以玩家51身份登录时,您会看到第2级第3级和第1级第1级。

如果我删除

   (a.class_privacy = 'public')

然后它不会显示任何结果......问题在于当DB使JOIN条件满足4次时...如何选择所有公共类和所有注册类而不重复条目并确保如果player_id在player_class表上,我会获得所有数据吗?

我知道这更容易,但我的头已经在这里待了一个多星期了:(

谢谢:)

1 个答案:

答案 0 :(得分:0)

好的,所以我终于找到了解决方案。 1)我多余了 2)我非常困惑

我需要解决的问题是:我需要SELECT公共和注册的类 公共类可能包含也可能不包含查询中的用户,但非公开注册的类必须包含所有数据...

基本上我的查询并没有错。它应该看起来像这样:

SELECT * FROM br_classes a 
LEFT JOIN br_player_class b 
ON a.class_id=b.class_id AND b.player_id=51
WHERE
(a.class_privacy = 'public')
OR (b.player_id51 AND b.player_class_status='in')
OR (a.class_owner=51)

查询检索所有公开的类,无论是否注册用户,以及他注册的所有其他类(公共或非公开)和玩家拥有的类

如此简单地说:问正确的问题是解决查询的最重要的事情。