【问题标题】:MySQL SELECT: Returning multiple columns based on a column value in the same tableMySQL SELECT:根据同一表中的列值返回多个列
【发布时间】:2011-03-28 19:20:52
【问题描述】:

我正在从包含文件元信息的单个表中读取行。其中一列 acl 包含一个标志(0,1 或 2)映射到(无限制、受限或私有)。我想创建一个 SELECT 查询,它将基于两个 PHP 变量 $userId 和 $isAdmin 返回文件数据。逻辑如下:

  • 如果 acl = 0,无论 $userId 或 $isAdmin 值如何,都返回文件信息行
  • 如果 acl = 1 且 $isAdmin 为 TRUE,则返回文件信息行
  • 如果 acl = 2 IF $userId = fileownerid(其中 fileownerid 是表中存储上传文件的所有者 ID 的列),则返回文件信息行

所以基本上我正在对表进行查询,并且只返回允许用户查看的行

我尝试在子查询中使用各种 CASE 和 IF 语句,但无法解决。首先,如果不处理 PHP 中的 SQL 结果是不可能的。

任何大师有办法吗?

【问题讨论】:

    标签: php mysql select


    【解决方案1】:

    select * from file where (acl = 0) or (acl = 1 and ? = 'TRUE') or (acl = 2 and ? = fileownerid) 然后将 isAdmin 和 userid 绑定到变量 1 和 2。

    【讨论】:

    • 干杯保罗......比我想象的要简单得多;有时你只见树木不见森林!
    【解决方案2】:

    我认为这样的事情应该可以完成:

    $qry = 'SELECT * FROM yourtable 
    WHERE (acl = 0)
    OR (acl = 1 AND '.$isAdmin.')
    OR (acl = 2 AND '.$userId.' = fileownerid)';
    

    【讨论】:

      猜你喜欢
      • 2016-06-18
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 2021-04-23
      • 1970-01-01
      相关资源
      最近更新 更多