Q.1)假设我有一个名为advertisements
的表,字段ad_memberships
包含逗号分隔的1,2,3,4类型值,我想计算每个的总行数那么我怎么能这样做呢?比如说包含值1的表中的总行数是10,2是5,3是15,4是3等,没有手动输入FIND_IN_SET()函数中的数据?我只是想自动计算所有。此处,1,2,3,4
来自名为memberships
的表,其中这些是不同行mbs_id
的唯一ID。
Q.2)这与第一个问题有关,两者都需要一起完成。我是分开写的,所以它清晰易懂。所以,假设我还有一个名为ads_category
的第二个表,其中包含字段ac_id
和ac_value
。此ac_id
已插入字段advertisements
的第一个表ads_category
中,以便所有广告都与某些不同的类别相关。现在计算第一个问题中的行后,我想要乘以第一个问题中收到的行数ac_value
并显示结果如下。
Standard Membership: 10 ads (Value: $5)
Premium Membership: 16 ads (Value: $12)
Elite Membership: 8 ads (Value: $7)
Ultimate Membership: 11 ads (Value: $8)
and so on....
这意味着对于拥有标准会员资格的会员,可以为拥有高级会员资格的会员提供10个广告,其中有16个广告可用,等等。我怎么能做到这一点?例如,数据库结构如下:
表:会员资格
mbs_id | mbs_name
1 | Standard
2 | Premium
3 | Elite
4 | Ultimate
表:广告
ad_id | ad_memberships | ad_category
1 | 1,2 | 1
2 | 1,2,3 | 1
3 | 1,3 | 2
4 | 2,3 | 3
表:ads_category
ac_id | ac_value
1 | 0.5
2 | 1
3 | 1.5
4 | 2
上述数据库结构的预期结果
Standard : 3 ads (Value: $1.5)
Premium : 3 ads (Value: $3)
Elite : 3 ads (Value: $4.5)
Ultimate : 0 ads (Value: $0)
现在我想加入所有三个表并获得相关结果。是的,在查询中不能手动输入任何值。所有这些都应该使用数据库中的值来完成。我怎样才能做到这一点?我正在使用PDO。请帮忙。
答案 0 :(得分:0)
我无法确定您的公式应该如何运作,因为您在问题中显示的示例结果似乎与示例数据不匹配。但也许这会让你知道如何开始。
SELECT CONCAT(
m.mbs_name,
' Membership: ',
COUNT(a.ad_id),
' ads ($',
SUM(c.ac_value)
')'
) AS result
FROM memberships AS m
LEFT OUTER JOIN advertisements AS a ON FIND_IN_SET(m.mbs_id, a.ad_memberships)
LEFT OUTER JOIN ads_category AS c ON a.ad_category = c.ac_id
GROUP BY m.mbs_id
答案 1 :(得分:0)
好的,所以我自己找到了解决方案。这是我达到的预期产量
CODE:
<div class="row">
<?php
$mbs = $pdo->prepare("SELECT mbs_id, mbs_name, mbs_color, mbs_perclick FROM memberships");
$mbs-> execute();
while($mbsid = $mbs->fetch()){ extract($mbsid);
$adstotal = $pdo->prepare("SELECT COUNT(*) as cnt, SUM(ac_value) FROM advertisements
LEFT JOIN ads_category ON ads_category.ac_id = advertisements.ad_category
WHERE INSTR(CONCAT(',', ad_memberships, ','), ',".$mbs_id.",') <> 0");
$adstotal-> execute();
$adsf = $adstotal->fetch();
?>
<div class="col-sm-2">
<span class="membership-indicator" style="background: <?php echo $mbs_color; ?>; margin-top: 5px"></span>
<?php echo $mbs_name; ?>
</div>
<div class="col-sm-2 text-center">
<?php echo $adsf['cnt']; ?>
</div>
<div class="col-sm-2 text-center">
$<?php $cps = $mbs_perclick/100; $finalval = $adsf['SUM(ac_value)']*$cps; echo number_format($finalval,4,'.',','); ?>
</div>
<?php } ?>
</div>