内部加入后,“where子句中的列'id'是不明确的”?

时间:2012-03-18 18:17:38

标签: php mysql

我有这个选择查询,直到我执行内连接才能正常工作。

$id = (int) $_GET['id'];
$data = mysql_query("
SELECT 
    events.start_datetime, 
    events.EVENT_NAME,
    events.START_TIME,
    events.END_TIME, 
    events.VENUE_LOCATION,
    venues.VENUE_NAME
FROM 
    events 
INNER JOIN venues 
        ON events.VENUE_LOCATION = venues.ID 
WHERE 
    id = ".$id) or die(mysql_error());

$id变量是这样的,查询根据url加载来自行的数据(即:page.php?id = 1)。

知道什么是错的吗?感谢

6 个答案:

答案 0 :(得分:2)

在WHERE子句中,将id更改为events.idvenues.id,无论您的意思是什么。不幸的是,MySQL或我都无法猜出你的意思。

答案 1 :(得分:1)

场地也可能有一个id字段,所以你需要指定events.id,而不仅仅是id,即

$id = (int) $_GET['id'];
$data = mysql_query("
SELECT 
    events.start_datetime, 
    events.EVENT_NAME,
    events.START_TIME,
    events.END_TIME, 
    events.VENUE_LOCATION,
    venues.VENUE_NAME
FROM 
    events 
INNER JOIN venues 
        ON events.VENUE_LOCATION = venues.ID 
WHERE 
    events.id = ".$id) or die(mysql_error());

答案 2 :(得分:1)

我猜表id中还有一列events?如果是这样,名称就不明确了,因为MySQL不会知道你是在谈论events.id还是venues.id。您没有将其命名为要选择的列之一并不重要。它存在于多个表中,因此您必须告诉它您实际需要哪一个。

答案 3 :(得分:1)

您没有为查询指定使用哪个表中的id,并且两个表都具有列名“id”,因此,它会在where子句不明确的情况下抛出“Column'id'的错误”。因此,通过将带有id的表名放在where子句中来更改查询。

Put either WHERE events.id = ... or WHERE venues.id = ...

答案 4 :(得分:1)

如果列名对于单个表不是唯一的,则必须使用表名(或适当的表别名)对其进行限定。所以,显然id出现在两个表格中。从描述中,听起来好像venues是添加的表,所以(在这里猜测)你可能需要在WHERE子句中将其限定为events.id

答案 5 :(得分:0)

所以今天我在为WordPress插件构建SQL构建器类时遇到了此错误。当我尝试执行这样的查询时;

SELECT ID,post_author,user_login,post_title,user_login,user_email FROM wp_users INNER JOIN wp_posts USING (post_title)

我发现有关ID的错误模棱两可,所以我进行了一些研究并找出了问题所在。

我要连接的两个表都有一个名为ID的列,由于我没有指定特定的列,因此MYSQL在我要选择的表上感到困惑。

因此,一旦我用wp_post.ID或wp_users.ID替换了ID,错误就消失了。