mysql结果不会根据我的查询显示

时间:2013-09-27 08:44:39

标签: php mysql join

我有一个名为add_project的表格:

+------------+---------+-------------------+--------------+
| project_id | user_id | project_status_id | project_name |
+------------+---------+-------------------+--------------+
|          1 |       1 |                 3 | abc          |
|          2 |       1 |                 0 | def          |
|          3 |       1 |                 1 | xyz          |
|          4 |       1 |                 3 | lmn          |
|          5 |       1 |                 0 | trs          |
|          6 |       1 |                 3 | ght          |
+------------+---------+-------------------+--------------+

在此表中,admin添加新项目。 admin user_id为1,因此很常见。 project_status_id表示该项目的完成状态(0 =新,1 =正在工作,3 =已完成)。

我还有另一张名为asign_project的表:

+----------+------------+---------+
| asign_id | project_id | user_id |
+----------+------------+---------+
|        1 |          1 |       5 |
|        2 |          5 |       9 |
|        3 |          2 |       5 |
|        4 |          4 |       5 |
|        5 |          6 |       9 |
|        6 |          3 |       9 |
+----------+------------+---------+

此表在此表中,admin将项目分配给不同的用户。

现在我想要的是找出每个用户完成的已完成项目的数量。如您所见,project_id(1,4)已完成user_id=5

所以我的问题是如何获得这个价值?

以下是我写的查询:

SELECT *
FROM   asign_project, add_project
WHERE  asign_project.project_id = add_project.project_id 
   AND project_status_id='3' 
   AND user_id='5'

但它显示:

  

#1052 - Column 'user_id' in where clause is ambiguous

sqlfiddle上查看。

等待你的回复。

4 个答案:

答案 0 :(得分:1)

我猜两个表都有user_id列,因此您需要在表名中进行更多指定。

Select 
    * 
FROM 
    asign_project, add_project 
WHERE 
    asign_project.project_id = add_project.project_id 
AND 
    project_status_id='3' 
AND 
    asign_project.user_id='5';

答案 1 :(得分:1)

user_id属于哪个表?你应该补充一下 TABLE_XXX.user_id.

  Select * FROM asign_project, add_project 
       WHERE 
          asign_project.project_id = add_project.project_id 
       AND 
          project_status_id='3' 
       AND 
          asign_project.user_id='5';

答案 2 :(得分:0)

此错误基本上意味着您选择的两个表具有相同的列名。

WHERE子句中,您只需指定要用于过滤数据的表名。

示例:

Select * 
FROM 
   asign_project, add_project 
WHERE 
   asign_project.project_id = add_project.project_id 
AND 
  asign_project.project_status_id='3' 
AND
  asign_project.user_id='5'

所有已经完成的工作是将WHERE子句中的user_id替换为assign_project.user_id(假设assign_project是您要使用的正确表)

答案 3 :(得分:0)

使用了这个

将user_id替换为add_project.user_id

Select 
  * 
FROM 
  asign_project, add_project 
WHERE 
    asign_project.project_id = add_project.project_id 
AND 
    project_status_id='3' 
AND 
    add_project.user_id='5'