Php 列';id#f';where子句中的where子句是不明确的
我有一个使用3表的联接查询,但我在where子句中得到的问题列“id\u f”是不明确的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
$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别忘了接受答案。单击左侧分数下方的勾号。对你的所有问题都这样做,人们将更有可能为你回答。:)