首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询,计算可用资金

MySQL查询,计算可用资金
EN

Stack Overflow用户
提问于 2015-06-28 22:14:31
回答 1查看 57关注 0票数 0

我正在尝试检索广告的id,如果用户在他/她的帐户中有足够的资金来支付显示广告的费用。我已经迷失方向了,

Mysql架构:

代码语言:javascript
复制
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错误:

代码语言:javascript
复制
Unknown column 'ad.c_id' in 'where clause'

-Query:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2015-06-28 22:21:21

我们需要查看您的数据库模式,以便了解这些查询是否合理。ad表上有哪些列?

如果您在编写MySQL查询时迷失了方向,对我来说,这是一个信号,表明您需要将查询分解为更简单的查询。

首先,熟悉mysql的JOIN语法;它允许您执行许多处理嵌套查询的操作,但以一种更易于阅读和思考的方式组织它们。

其次,也是更重要的是,我认为如果您对复杂的MySQL查询的功能和工作方式没有绝对的信心,就不应该将它们放入生产代码中。由于您使用的是PHP,因此一次运行一个查询、在变量中收集结果并在后续查询中使用这些变量应该很容易。这样,您就不需要对一个庞大的整体查询进行故障排除;相反,您可以孤立地对SELECT id FROM ad WHERE c_id = ad.c_id进行故障排除,这将更容易找到修复程序(或在此处获取答案等)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31100766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档