MySQL查询,计算可用资金

时间:2015-06-28 14:14:31

标签: php mysql

我尝试检索广告的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

1 个答案:

答案 0 :(得分:2)

我们需要查看您的数据库架构,以了解这些查询是否合理。 toBeParse.replaceAll(yourRegexString, replacement); 表上有哪些列?

如果你在编写MySQL查询时迷路了,对我而言,这表明你需要将查询分解为更简单的查询。

首先,熟悉mysql的ad语法;它允许您使用嵌套查询执行许多操作,但是以更易于阅读和更容易思考的方式构建它们。

其次,更重要的是,如果您对他们的工作以及工作方式不完全有信心,我认为您不应该将复杂的MySQL查询放入生产代码中。您正在使用PHP,因此应该很容易一次运行一个查询,将结果收集到变量中,并在后续查询中使用这些变量。这样你就不会对一个巨大的整体查询进行故障排除;相反,您可以单独对JOIN进行故障排除,这样可以更容易找到修复程序(或者在此处获取答案)。