未知栏?

时间:2011-02-10 22:54:51

标签: php sql mysql

我正在尝试在这两个用户之间找到共同的朋友:user1和user92

这是成功显示它们的SQL:

SELECT IF(user_a = 1 OR user_a = 92, user_b, user_a) friend
            FROM friendship
            WHERE (user_a = 1 OR user_a = 92) OR (user_b = 1 OR user_b = 92)
            GROUP BY 1
            HAVING COUNT(*) > 1

它的外观如下:

朋友
61个
72个
73个
74个
75个
76个
77个
78个
79个
80个
81个

所以现在我想在数字72之后选择所有用户,我尝试用这个SQL做但是它不起作用?它给了我错误,“where子句中的未知列名朋友”

SELECT IF(user_a = 1 OR user_a = 92, user_b, user_a) friend
            FROM friendship
            WHERE friend > 72 
              AND (user_a = 1 OR user_a = 92) OR (user_b = 1 OR user_b = 92)
            GROUP BY 1
            HAVING COUNT(*) > 1

我做错了什么,或者正确的方法是什么?

3 个答案:

答案 0 :(得分:1)

您刚刚在SELECT子句中定义了“friend”列,因此WHERE子句无法“看到”它(它在SELECT子句之前处理)。

子查询

SELECT * FROM (
SELECT IF(user_a = 1 OR user_a = 92, user_b, user_a) friend
FROM friendship
WHERE (user_a = 1 OR user_a = 92) OR (user_b = 1 OR user_b = 92)
) X
WHERE friend > 72
GROUP BY friend
HAVING COUNT(*) > 1

答案 1 :(得分:0)

您可以将IF()复制到WHERE子句中。另请注意,您需要将WHERE的第二部分组合在一起:

SELECT IF(user_a = 1 OR user_a = 92, user_b, user_a) friend
FROM friendship
WHERE IF(user_a = 1 OR user_a = 92, user_b, user_a) > 72
    AND ((user_a = 1 OR user_a = 92) OR (user_b = 1 OR user_b = 92))
GROUP BY 1
HAVING COUNT(*) > 1

答案 2 :(得分:0)

我正试图在你的台词之间阅读 您是否尝试在“页面”中列出结果,这是您想要从72开始阅读的原因?

如果您正在尝试创建页面,请查看LIMIT foo,bar foo是结果集中的起始行号(不是您的ID),bar是要返回的行数。

LIMIT 100,20将从结果集中返回20行,从第100行开始。