Php 列';id#f';where子句中的where子句是不明确的

Php 列';id#f';where子句中的where子句是不明确的,php,mysql,sql,mysql-error-1052,Php,Mysql,Sql,Mysql Error 1052,我有一个使用3表的联接查询,但我在where子句中得到的问题列“id\u f”是不明确的 $id_f=$_GET['id_f']; $query="SELECT *, s.name AS van, st.name AS naar, p.titl, p.vname FROM p1_users, f_confirm AS v INNER JOIN s_steden AS s ON v.van = s.id INNER JOIN s_steden AS st ON v.naar = st.id I

我有一个使用3表的联接查询,但我在where子句中得到的问题列“id\u f”是不明确的

$id_f=$_GET['id_f'];

$query="SELECT *, s.name AS van, st.name AS naar, p.titl, p.vname
FROM p1_users, f_confirm AS v 
INNER JOIN s_steden AS s ON v.van = s.id
INNER JOIN s_steden AS st ON v.naar = st.id
INNER JOIN p1_users AS p ON v.id_f = p.id_f
AND DATE_FORMAT(date,'%Y-%c-%d')WHERE id_f='$id_f'";
$result=mysql_query($query)or die('Wrong query : ' . mysql_error());
$row=mysql_fetch_assoc($result);

有人能帮忙吗?

您需要在where子句中使用
v.id\u f
p.id\u f
,因为两个表都有该名称的列,所以您需要消除歧义

实际上,在本例中使用哪一个并不重要,因为您正在执行
内部联接


如果您使用
自然联接,这可能不是一个要求,但我不建议使用这些联接。

这意味着,两个或多个表包含名为“id\u f”的列(在您的情况下是p1\u用户和f\u确认)。您需要指定与之相关的表,如下所示:

AND DATE_FORMAT(date,'%Y-%c-%d')WHERE p.id_f='$id_f'";

问题出在WHERE子句中,在DATE_格式之后,您编写了id_f='$id_f',但在该查询的其他表中有此列(id_f)。因此,数据库不知道您真正想要使用哪个表。

不明确的字段是两个或多个表(或子查询)中的查询中的字段

你有两个选择

  • 在每个不明确的字段上使用table_name前缀(table1.field_x,table2.field_x)
  • 使用表别名,并将别名用作每个不明确字段(别名1.x、别名2.x)的前缀

  • 在您的示例中,在内部JOIN语句中,您使用了“v.id\u f=p.id\u f”的别名,但在WHERE子句中,您忘记了别名。

    @mary别忘了接受答案。单击左侧分数下方的勾号。对你的所有问题都这样做,人们将更有可能为你回答。:)