我正在尝试检索广告的id,如果用户在他/她的帐户中有足够的资金来支付显示广告的费用。我已经迷失方向了,
Mysql架构:
campaign_deposit:
c_id (campaign id), btc (amount deposited)...
ad_view:
a_id (ad id), btc (cost of impression)...
ad:
id (ad id), uv (cost of impression)...MySQL错误:
Unknown column 'ad.c_id' in 'where clause'-Query:
SELECT id FROM
(
SELECT *,
(
SELECT SUM(btc) as btc FROM
(
SELECT `btc` FROM ad_view WHERE a_id IN
(
SELECT id FROM ad WHERE c_id = ad.c_id
) OR ad_space_id IN
(
SELECT id FROM ad WHERE c_id = ad.c_id
)
UNION ALL SELECT (`btc` * -1) AS `deposit` FROM
campaign_deposit WHERE c_id=ad.c_id GROUP BY c_id
) AS Total
) AS deposit FROM ad
) AS ad
WHERE uv >= 0 AND click >= 0 AND uv < deposit AND click < deposit AND deleted=0 AND c_id IN
(
SELECT id FROM campaign WHERE publisher = 0 AND deleted=0
) LIMIT 1发布于 2015-06-28 22:21:21
我们需要查看您的数据库模式,以便了解这些查询是否合理。ad表上有哪些列?
如果您在编写MySQL查询时迷失了方向,对我来说,这是一个信号,表明您需要将查询分解为更简单的查询。
首先,熟悉mysql的JOIN语法;它允许您执行许多处理嵌套查询的操作,但以一种更易于阅读和思考的方式组织它们。
其次,也是更重要的是,我认为如果您对复杂的MySQL查询的功能和工作方式没有绝对的信心,就不应该将它们放入生产代码中。由于您使用的是PHP,因此一次运行一个查询、在变量中收集结果并在后续查询中使用这些变量应该很容易。这样,您就不需要对一个庞大的整体查询进行故障排除;相反,您可以孤立地对SELECT id FROM ad WHERE c_id = ad.c_id进行故障排除,这将更容易找到修复程序(或在此处获取答案等)。
https://stackoverflow.com/questions/31100766
复制相似问题