我尝试检索广告的ID,如果用户的帐户中有足够的资金来支付展示广告的费用。我虽然迷路了,
Mysql Schema:
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
答案 0 :(得分:2)
我们需要查看您的数据库架构,以了解这些查询是否合理。 toBeParse.replaceAll(yourRegexString, replacement);
表上有哪些列?
如果你在编写MySQL查询时迷路了,对我而言,这表明你需要将查询分解为更简单的查询。
首先,熟悉mysql的ad
语法;它允许您使用嵌套查询执行许多操作,但是以更易于阅读和更容易思考的方式构建它们。
其次,更重要的是,如果您对他们的工作以及工作方式不完全有信心,我认为您不应该将复杂的MySQL查询放入生产代码中。您正在使用PHP,因此应该很容易一次运行一个查询,将结果收集到变量中,并在后续查询中使用这些变量。这样你就不会对一个巨大的整体查询进行故障排除;相反,您可以单独对JOIN
进行故障排除,这样可以更容易找到修复程序(或者在此处获取答案)。