2011-10-10 47 views
1

我试图让MySQL查询给我相关数据2张表。因此,一个用户可以访问2个项目,总共有3个帖子(“流”)。实质上,我想要在project_users中获得关联的项目,然后获取与这些项目关联的帖子。3个表中的MySQL查询

的数据看起来像这样:

表1:用户(1个使用者通过 'ID' 标识)

表2:project_users(用户用2个项目在这种情况下相关联)

表3:流(附职位,以不同的项目,但我要根据我的测试数据集得3)

我(打破)查询看起来是这样的:

SELECT U.`id`, P.`kf_users`, P.`kf_projects`, S.`kf_projects`, S.`body` 
    FROM users U 
    LEFT JOIN projects_users P ON U.`id` = P.`kf_users` 
    LEFT JOIN stream S ON P.`kf_users` = S.`kf_projects` 
    WHERE U.`id` = 1 

我究竟在想什么?我尝试了子查询,但它不会让我有多行,使它在我拥有的形式中无用。

谢谢!

+0

是'WHERE'子句中的'U.kp_user'正确的列(不应该只是'U.id')? (我没有模式,所以这只是一个猜测。) –

+0

对不起,是一个错字。但仍然没有运气! –

+0

您需要提供架构。查询如何中断? – Pepe

回答

2

我没有得到任何结果,任何时候,我尝试此查询

真的吗?然后尝试将其更改为:

SELECT * 
FROM users U 
WHERE id = 1 

我怀疑这会给你没有结果。知道这个查询也失败了,希望能够帮助你更快找到问题(你没有一个id为1的用户)。

注意:如果这给你一个结果,那么上面用LEFT JOIN发布的查询也应该返回一些行,因为添加一个LEFT JOIN不应该删除任何行。


更新:尝试添加别名,使列名唯一:

SELECT 
    U.id, 
    P.kf_users, 
    P.kf_projects AS p_kf_projects, 
    S.kf_projects AS s_kf_projects, 
    S.body 
FROM .... 
+0

肯定会得到你给出的查询结果。我也加入到了projects_users表中并得到了结果。 (SELECT U.'id',P.'kf_users',P.'id' FROM users U LEFT JOIN projects_users P ON U.'id' = P.'kf_users' WHERE U.'id' = $ id)但是它如果我使用上面发布的原始查询,仍然不会给出任何结果。 –

+1

@Rylan Dirksen:添加一个LEFT JOIN不会删除行。必须有错误。你是否从PHP发送查询?你检查了mysql_query的返回值和(如果有必要)mysql_error吗?你能发布你的确切代码吗? –

+0

感谢您帮助我重新思考我的查询。我从头开始重建它,发现我从错误的表格中选择。 –

0

所以我想通了,我做错了什么。我之前从用户表加入,这是没有必要的,因为我的PHP脚本已经有用户ID。

相反,我从projects_users表连接,并拿出给用户表引用:

SELECT S.* 
    FROM projects_users P 
    LEFT JOIN stream S ON P.`kf_projects` = S.`kf_projects` 
    WHERE P.`kf_users` = '1'; 

...和它的工作就像一个魅力。感谢你的帮助!