0

我有以下表格:

用户:

id,用户名,所有者

管理员

id,用户名,所有者

交易:

id,sender_id,sender_type

每个用户可以由一个管理员拥有 每个管理员可以由另一个管理员拥有

我正在尝试处理某些访问级别,并且我想检索具有通过 PHP 生成的列表的发件人部分所有者的查询行。

为此,我需要根据我拥有的数据获取发件人的所有者,而无需更改数据库结构:

SELECT 
    * ,
    IF (t.sender_type='admin',
        ( SELECT owner AS qowner 
          FROM admins
          WHERE id=t.sender_id),
          ( SELECT owner AS qowner FROM users 
            WHERE id=t.sender_id)
    ) AS qowner 
FROM `transactions` t 
WHERE qowner IN ('admin22','admin33','admin44','admin66')

我不断收到此错误:“where 子句”中的未知列“qowner”

我现在陷入了困境。我将感谢所有的帮助。谢谢!

4

2 回答 2

3

我认为您似乎正在尝试从 WHERE 子句中的子选择中引用一列。

但是不需要子选择:-

SELECT * ,
IF (t.sender_type='admin', a.owner, b.owner) AS qowner 
FROM transactions t 
LEFT OUTER JOIN admins a ON t.sender_id = a.id
LEFT OUTER JOIN users b ON t.sender_id = a.id
HAVING qowner IN ('admin22','admin33','admin44','admin66')
于 2013-10-04T15:11:02.493 回答
0
SELECT * ,
IF (t.sender_type='admin',(SELECT owner FROM admins WHERE id=t.sender_id),(SELECT owner FROM users WHERE id=t.sender_id)) AS qowner 
FROM transactions t 
WHERE qowner IN ('admin22','admin33','admin44','admin66')

(未经测试)

于 2013-10-04T15:05:48.213 回答