我在过去6个月内运行此查询,但在几台服务器上没有问题,但今天出现了错误?
error_message: Database query failed: Column 'account_id' in field list is ambiguous
列account_id不明确?
$sql_query = "SELECT pricenotifier_criteria.criteria_id , pricenotifier_criteria.`event_id` , pricenotifier_criteria.`ticket_id` , pricenotifier_criteria.`criteria` ,pricenotifier_criteria.account_id ,seller_ids.user_id,seller_ids.seller_id
FROM pricenotifier_criteria
INNER JOIN seller_ids
ON ( pricenotifier_criteria.account_id = seller_ids.account_id )
INNER JOIN pricenotifier_users
ON (pricenotifier_criteria.user_id = pricenotifier_users.user_id )
INNER JOIN pricenotifier_pricing_table
ON ( pricenotifier_users.pricing_id = pricenotifier_pricing_table.pricing_id )
WHERE status=1 AND pricenotifier_pricing_table.processing_time = 15
AND pricenotifier_criteria.user_id = 339
ORDER BY pricenotifier_criteria.event_id
LIMIT 2000
OFFSET 0";
我曾尝试在phpmyadmin的sql中运行此查询,但没有出现错误?如果我通过PHP运行这比我得到的错误
要做的事情
我真的很遗憾在我运行此查询的页面中我调用了另一个页面,其他程序员没有提到表格prefrix这就是为什么我们收到此错误但所有回复的人都是对的所以每个人都有几乎真实的答案(为什么会出现ambigius错误)。我在这里发布它是因为我确定我的查询没有任何暧昧,我是对的但是另一个文件正在运行一些查询并且有错误。
答案 0 :(得分:0)
清洁版同样的东西......
SELECT c.criteria_id
, c.event_id
, c.ticket_id
, c.criteria
, c.account_id
, s.user_id
, s.seller_id
FROM pricenotifier_criteria c
JOIN seller_ids s
ON s.account_id = c.account_id
JOIN pricenotifier_users u
ON u.user_id = c.user_id
JOIN pricenotifier_pricing_table g
ON g.pricing_id = u.pricing_id
WHERE status = 1
AND g.processing_time = 15
AND c.user_id = 339
ORDER
BY c.event_id
LIMIT 2000;
答案 1 :(得分:0)
我敢打赌你的php代码只选择account_id
而没有表格前缀pricenotifier_criteria
或seller_ids
。由于两个表都包含字段account_id
,因此如果没有表前缀,这将是不明确的。
答案 2 :(得分:0)
此错误:
error_message:数据库查询失败:字段列表中的列'account_id'不明确
表示account_id
是2个或更多表的字段。举个例子:
SELECT account_id, other_things
FROM table_account
INNER JOIN table_account2 ON (table_account.account_id = table_account2.account_id)
account_id
是2个表格的字段:table_account
和table_account2
。然后,这是不明确的,因为应该从哪个表中选择account_id
?
正如@strawberry所述,在您向我们展示的查询中,唯一可能含糊不清的字段是status
。如果您确实遇到此问题,请确保在查询中为所有字段添加前缀,如下所示:table.field_name
。然后,这将避免这种错误。