【问题标题】:SQL QUERY selecting ban list, child and father joinsSQL QUERY 选择禁止列表,孩子和父亲加入
【发布时间】:2013-04-20 22:35:32
【问题描述】:

我已经建立了以下表格(仅涉及的列)

桌面论坛:

编号 |论坛名称 |相关 ------------------------------ 1 |游戏 | 0 2 |动作游戏 | 1 // 论坛游戏子论坛 3 |角色扮演游戏 | 1 // 论坛游戏子论坛

禁止表

编号 |用户援助 |论坛ID ---------------------- 1 | 56 | 1 // 用户 56 被论坛游戏禁止

我要做的是构建一个函数来查看用户是否被论坛 X 禁止,如果他被禁止,他认为与论坛 X 相关的论坛被禁止。例如:用户 56 也被禁止来自论坛 rpg 游戏。

我写了以下没有用的查询:

选择 f.id, f. 相关的, b.useraid 为 u1, b2.useraid 作为 u2 来自论坛 f LEFT JOIN banlist b ON(b.forumid=f.id and b.useraid='56') LEFT JOIN banlist b2 ON(b2.forumid=f.relatedto and b2.useraid='56') 其中 f.id='2'

有什么想法吗?

【问题讨论】:

  • 结果集应该是什么样子的?
  • 如果禁止则显示 1,否则显示 0。我建立的查询是一个尝试。
  • 是否存在嵌套级别的父级到子级(例如孙子级)或只有一个级别?由于您使用的是 MySQL,因此单个级别会容易得多。顺便说一句 - 如果论坛表中存在,您当前的查询将始终返回一条记录。
  • 目前没有孙辈可用:) 只有 2 个级别。论坛和子论坛。

标签: php mysql sql database


【解决方案1】:

比如……

SELECT f.* FROM forums f JOIN banlist b ON b.forumid = f.id OR b.forumid = f.parent_id;

...?

【讨论】:

    【解决方案2】:

    我认为您的查询非常接近,假设您希望在用户未被禁止时返回结果,并且在用户被禁止时不想返回结果:

    SELECT *
    FROM forums f
      LEFT JOIN banlist b ON f.id = b.forumid AND b.useraid = 56
      LEFT JOIN banlist b2 ON f.relatedto = b2.forumid AND b2.useraid = 56
    WHERE b.id IS NULL 
      AND b2.id IS NULL
      AND f.id = 2
    

    SQL Fiddle Demo

    您可能需要使用OR 进行IS NULL 检查 - 取决于您想要的结果(例如,如果孩子被禁止但父母不是)。

    【讨论】:

      【解决方案3】:

      我找到了答案。

      SELECT 
        f.id,
        count(b.id) AS isbanned
      FROM forums f 
      LEFT JOIN banlist b
        ON (
          (
            b.forumid = f.id OR b.forumid = f.relatedto
          )
          AND userid = '$userid'
        )
      WHERE f.id = '$forumid'
      

      【讨论】:

        【解决方案4】:

        要确定用户是否被禁止,您可以创建一个函数或一个过程,将其传递给用户帮助。

        创建过程用户状态@useraid int 作为 如果(从禁止列表中选择计数(*) 其中 USERAID = @USERAID) > 0 开始 打印“用户被禁止” 别的 打印“用户未被禁止” 结束

        【讨论】:

          猜你喜欢
          • 2017-12-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-28
          • 2013-09-15
          • 1970-01-01
          • 2012-05-04
          • 2021-10-22
          相关资源
          最近更新 更多