这是我的数据库结构。
表:会员资格
mbs_id | mbs_color | mbs_name
1 | red | Standard
2 | yellow | Premium
3 | green | Elite
4 | blue | Ultimate
表:广告
ad_id | ad_memberships
1 | 1,2
2 | 1,2,3
3 | 1,3
4 | 2,3
我有一个代码,根据ad_memberships
中的值显示每个循环的颜色。这意味着如果ad_membership
包含1,2,则它在方框中并排显示红色和黄色。使用以下代码很好地完成了这项工作。但我现在要做的是当我在这些框中移动时,它会显示title
属性中的成员资格名称。使用会员名称我的意思是mbs_name
。例如,如果悬停红色框,则会显示Standard
如果黄色框悬停,则会显示Premium
等。这些彩色框从<span class="membership-indicator">
显示。这里应该添加什么?
代码:
<div class="ads-container">
<?php
$cat = $pdo->prepare("SELECT * FROM ads_category");
$cat-> execute();
$i = 0;
while($s = $cat->fetch()){
$ads = $pdo->prepare("SELECT *, GROUP_CONCAT(memberships.mbs_color) AS colors FROM advertisements
INNER JOIN memberships ON FIND_IN_SET(memberships.mbs_id, advertisements.ad_memberships)
LEFT JOIN ads_category ON advertisements.ad_category = ads_category.ac_id
WHERE ad_credits >= ac_credits AND ad_category = :cat AND ad_status = 'active'
GROUP BY advertisements.ad_id");
$ads-> bindValue(':cat', $s['ac_id']);
$ads-> execute();
while($a = $ads->fetch()){
$mbs_colors = explode(',', $a['colors']);
?>
<div class="" <?php if($i++ != 0){ echo "style='margin-top: 30px'"; } ?>>
<i class="fa fa-bullhorn" aria-hidden="true"></i> <?php echo $ac_category; ?>
</div>
<div class="col-sm-4">
<div class="adcover">
<div class="ad-title">
<a href="surf.php?ad=<?php echo $a['ad_id']; ?>" target="_blank"><?php echo $a['ad_title']; ?></a>
</div>
<div class="ad-footer-two">
<?php foreach($mbs_colors as $color){ ?>
<span class="membership-indicator" style="background: <?php echo $color; ?>; margin-top: 4px" title="<?php echo $a['mbs_name']; ?>"></span>
<?php } ?>
</div>
</div>
</div>
<?php } } ?>
</div>
答案 0 :(得分:2)
首先,您可以像获取颜色一样获取mbs_name
数据:
GROUP_CONCAT(memberships.mbs_name) AS names
在while
循环中,您可以再次等效地爆炸它们:
$mbs_names = explode(',', $a['names']);
然后您可以将两个数组一起添加为:
$membershipData = array_map(function($color, $name){
return (object)['color' => $color, 'name' => $name];
}, $mbs_colors, $mbs_names);
最后,您可以遍历这个新创建的数组并打印出数据:
<?php foreach($membershipData as $membership){ ?>
<span class="membership-indicator" style="background: <?php echo $membership->color; ?>; margin-top: 4px" title="<?php echo $membership->name; ?>"></span>
<?php } ?>