我有一个选择查询,它在执行内部联接之前一直运行良好。
$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)
知道怎么了吗?感谢
在WHERE子句中,将id
更改为events.id
或venues.id
,以您的意思为准。不幸的是,MySQL和我都猜不出你指的是哪一个。
场馆可能也有一个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());
我猜表events
中也有一列id
?如果是这样的话,这个名称就不明确了,因为MySQL不知道你说的是events.id
还是venues.id
。没有将其命名为要选择的列也没关系。它存在于多个表中,所以你必须告诉它你真正想要的是哪一个。
您没有指定查询使用哪个表的id,并且两个表都有列名"id",因此,它会抛出"column'id'in where子句不明确"的错误。因此,通过将带有id的表名放在where子句中来更改查询。
Put either WHERE events.id = ... or WHERE venues.id = ...
如果列名对单个表不是唯一的,则必须使用表名(或表别名(如果适用))对其进行限定。因此,显然id
出现在两个表中。从描述中,听起来好像venues
是添加的表,所以(在这里猜测)您可能需要在WHERE子句中将其限定为events.id
。
所以今天我在为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的列,由于我没有指定特定的列,MYSQL对我要从哪个表中选择感到困惑。
因此,一旦我将ID替换为wp_post.ID或wp_users.ID,错误就消失了。